Ответы:
grep -r foo *
не ищет совпадения в скрытых файлах или каталогах, также *
расширяется оболочкой, так что вы можете получить слишком длинную ошибку в списке аргументов, если в текущем каталоге много записей, или другие ошибки или неправильное поведение, если Имя некоторых файлов или каталогов начинается с символа тире.
Invocation grep -r foo .
не имеет вышеуказанных недостатков
Обновлено:
Еще одно отличие: справочная страница grep (@ fedora17) гласит:
-r, --recursive
Read all files under each directory, recursively, following symbolic links only if they
are on the command line. ...
Также будет разница при выполнении этой команды в пустой директории:
$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$
Если вы используете звездочку, вы не можете сопоставлять файлы в каталогах, чье имя начинается с точки, например .cache
.
Обновить:
Это связано с *
тем, что оболочка раскрывается перед вызовом grep
, поэтому она получает список имен вместо одного имени каталога (для текущего .
). Способ оболочки расширить шаблон может быть настроен с параметром оболочки (как nullglob
, nocaseglob
или другие bash
варианты) или быть переменными окружения (например , LANG
или LC_ALL
)