Відповіді:
grep -r foo *
не шукає збігів у прихованих файлах чи каталогах, також *
розширюється оболонкою, так що ви можете виявити занадто довгу помилку списку аргументів, коли в поточному каталозі багато записів, або якісь інші помилки чи неправильне поведінка, якщо назва деяких файлів чи каталогів починається з символу тире.
Виклик 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
)