grep -r foo *
não procura correspondências em arquivos ou diretórios ocultos, também *
é expandido pelo shell, para que você possa acabar com um erro muito longo da lista Argument quando houver muitas entradas no diretório atual ou outros erros ou mau comportamento, se o O nome de alguns dos arquivos ou diretórios começa com um caractere de hífen.
A invocação grep -r foo .
não possui as falhas acima
Atualizada:
Outra diferença: a página de manual do grep (@ fedora17) diz:
-r, --recursive
Read all files under each directory, recursively, following symbolic links only if they
are on the command line. ...
Também haverá uma diferença quando você executar este comando em um diretório vazio:
$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$