Yanıtlar:
grep -r foo *
gizli dosyalarda veya dizinlerde eşleşmeleri aramaz, ayrıca *
kabuk tarafından genişletilir, böylece geçerli dizinde çok fazla giriş olduğunda bir Argüman listesi çok uzun bir hatayla karşılaşabilir veya bazı dosya veya dizinlerin adı bir tire karakteriyle başlar.
Çağrının grep -r foo .
yukarıdaki kusurları yok
Güncellenmiş:
Başka bir fark: grep'in man sayfası (@ fedora17) diyor ki:
-r, --recursive
Read all files under each directory, recursively, following symbolic links only if they
are on the command line. ...
Bu komutu boş bir dizinde yürüttüğünüzde de bir fark olacaktır:
$ grep -r foo *; echo $?
grep: *: No such file or directory
2
$ grep -r foo .; echo $?
1
$
Yıldız işareti kullanırsanız, adı gibi bir nokta ile başlayan dizinlerdeki dosyaları eşleştiremezsiniz .cache
.
Güncelleme:
Bunun nedeni, *
çağrılmadan önce kabuk tarafından genişletilmesidir grep
, bu nedenle tek bir dizin adı (geçerli için .
) yerine bir ad listesi alır . Desen genişleyerek kabuk (gelince kabuk parametresi özelleştirilebilir nullglob
, nocaseglob
ya da diğer bash
(ortam gibi değişkenleri seçenekleri) veya LANG
veya LC_ALL
)