Ответы:
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)