Odpowiedzi:
grep -r foo *
nie wyszukuje dopasowań w ukrytych plikach lub katalogach, *
jest również rozszerzany przez powłokę, więc możesz skończyć z zbyt długim błędem listy argumentów, gdy w bieżącym katalogu jest dużo wpisów, lub innymi błędami lub złym zachowaniem, jeśli nazwa niektórych plików lub katalogów zaczyna się od myślnika.
Inwokacja grep -r foo .
nie ma powyższych wad
Zaktualizowano:
Kolejna różnica: strona man grep (@ fedora17) mówi:
-r, --recursive
Read all files under each directory, recursively, following symbolic links only if they
are on the command line. ...
Różnica wystąpi także po wykonaniu tego polecenia w pustym katalogu:
$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$
Jeśli używasz gwiazdki, nie możesz dopasować plików w katalogach, których nazwa zaczyna się od kropki, np .cache
.
Aktualizacja:
Wynika to z faktu, że *
jest on rozszerzany przez powłokę przed wywołaniem grep
, więc otrzymuje listę nazw zamiast pojedynczej nazwy katalogu (dla bieżącego .
). Sposobem powłoki rozwinąć wzór może być dostosowany za pomocą parametru powłoki (jak nullglob
, nocaseglob
lub inne bash
opcje) lub być zmienne środowiska (np LANG
lub LC_ALL
)