Природа позиционных параметров

grep имеет рекурсивное -r опция, которая будет искать каждый файл в каждом подкаталоге для шаблона.

-l опция просто перечисляет файлы, содержащие шаблон. Если Вы хотите количество соответствий в каждом файле, использовать -c вместо этого, и если Вы хотите видеть соответствия, не используйте или-l или-c.

  1. (R|r) просто подробный способ записать [Rr]. это также медленнее, чем класс (но недостаточно иметь значение, если это не находится в цикле, который выполняет миллионы времен):

    grep -lr '[Rr]eading[Tt]est[Dd]ata' ~/

  2. Абсолютно нечувствительный к регистру:

    grep -lir 'readingtestdata' ~/

  3. если Вы просто хотите искать файлы в ~, но не в подкаталогах затем можно использовать find:

    find ~/ -maxdepth 1 -type f -print0 | xargs -0r grep -l '[Rr]eading[Tt]est[Dd]ata'

2
21.08.2018, 01:22
2 ответа

В ударе некоторые переменные резервируются, такие как 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"
3
27.01.2020, 22:00
  • 1
    Почему не делают яблока и оранжевой потребности, которая будет заключена в кавычки? Я, хотя любую неупомянутую строку рассматривают как переменную, ключевое слово, и т.д. –  boulder_ruby 08.07.2014, 02:55

Поведение является зависимым оболочки.

Вы объявили функцию не 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
1
27.01.2020, 22:00

Теги

Похожие вопросы