Risposte:
grep -r foo *
non cerca corrispondenze in file o directory nascosti, inoltre *
viene espanso dalla shell, quindi potresti ritrovarti con un errore troppo lungo nella lista degli Argomenti quando ci sono molte voci nella directory corrente, o altri errori o comportamenti scorretti se il il nome di alcuni file o directory inizia con un trattino.
L'invocazione grep -r foo .
non ha i suddetti difetti
aggiornato:
Un'altra differenza: la pagina man di grep (@ fedora17) dice:
-r, --recursive
Read all files under each directory, recursively, following symbolic links only if they
are on the command line. ...
Ci sarà anche una differenza quando si esegue questo comando in una directory vuota:
$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$
Se usi l'asterisco, non puoi abbinare i file nelle directory il cui nome inizia con un punto, come .cache
.
Aggiornare:
Questo perché il file *
viene espanso dalla shell prima di chiamare grep
, quindi riceve un elenco di nomi anziché un singolo nome di directory (per l'attuale .
). Il modo in cui la shell espande il modello può essere personalizzato con il parametro shell (come per nullglob
, nocaseglob
o altre bash
opzioni) o essere variabili d'ambiente (come LANG
o LC_ALL
)