Відповіді:
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)