grep
имеет рекурсивное -r
опция, которая будет искать каждый файл в каждом подкаталоге для шаблона.
-l
опция просто перечисляет файлы, содержащие шаблон. Если Вы хотите количество соответствий в каждом файле, использовать -c
вместо этого, и если Вы хотите видеть соответствия, не используйте или-l или-c.
(R|r)
просто подробный способ записать [Rr]
. это также медленнее, чем класс (но недостаточно иметь значение, если это не находится в цикле, который выполняет миллионы времен):
grep -lr '[Rr]eading[Tt]est[Dd]ata' ~/
Абсолютно нечувствительный к регистру:
grep -lir 'readingtestdata' ~/
если Вы просто хотите искать файлы в ~, но не в подкаталогах затем можно использовать find
:
find ~/ -maxdepth 1 -type f -print0 | xargs -0r grep -l '[Rr]eading[Tt]est[Dd]ata'
В ударе некоторые переменные резервируются, такие как 0$, который дает название команды - в этом экземпляре, это - название сценария (следовательно ./shell.txt). Другим примером является $$, который даст идентификатор процесса. Я полагаю, что $FUNCNAME должен распечатать название используемой функции.
Любые переменные в формате, $1$ 2$ 3 и т.д. будет любыми позиционными параметрами, которые Вы передали ему.
Если бы Вы удалили переменную за 0$ и заменили ее $FUNCNAME, то Вы получили бы вывод, который Вы ищете.
Вот короткий сценарий, давайте сохраним его как passingVariables.sh (мы используем .sh, чтобы показать, что это - сценарий оболочки - чисто поверхностный, но он помогает сохранить вещи прямо):
#!/bin/bash
echo "The first word is $1 and the second word is $2"
Теперь, если я выполнил его как это:
./passingVariables.sh apple orange
Это выложило бы следующее:
"The first word is apple and the second word is orange"
Поведение является зависимым оболочки.
Вы объявили функцию не POSIX путь. Портативный синтаксис был бы
func()
{
...
Вы, вероятно, использовали bash
запускать Ваш скрипт. bash
не имеет никакого значения между нестандартным синтаксисом, который Вы использовали и стандартный. В обоих случаях, $0
обратитесь к названию сценария.
Если Вы использовали AT&T или реализацию общественного достояния ksh
который представил синтаксис, Вы используете и рассматриваете функции, объявленные с function
маркер по-другому, Вы наблюдали бы поведение, которое Вы ожидали:
$ cat go
function func
{
echo $0: $1 and $2
}
func1()
{
echo $0: $1 and $2
}
func ball boy
func1 ball boy
$ bash go
go: ball and boy
go: ball and boy
$ ksh go
func: ball and boy
go: ball and boy