Bunu yaptığınızda genişletilmiş ediliyor önce o geçirilir . Yani, biz üç dosya var (eğer demek ki , ve ) bir dizin içinde fiilen çalıştığı .ls **lsabcls *ls a b c
Bash genişleyemediğinde, ham dizgeden geçer¹. Bu yüzden hatada joker karakterleri ve bulunmayan bir mesajı görürsünüz. lstam anlamıyla çağrılan bir dosyanın listesini göstermeye çalıştı *.bash*.
Peki bu neden genişlemedi? Varsayılan olarak globbing (bu joker karakter genişletmesine ne denir) gizli dosyaları döndürmez. Bunu şu şekilde değiştirebilirsiniz shopt -s dotglob(eğer yapışmazsanız devam etmeyecektir .bashrc- iyi bir nedenden dolayı varsayılan olarak devre dışı bırakılabilir, bu yüzden dikkatli olun), hızlı bir demo:
$ ls *.bash*
ls: cannot access *.bash*: No such file or directory
$ shopt -s dotglob
$ ls *.bash*
.bash_aliases .bash_history .bash_logout .bashrc .bashrc.save
Bunun istisnası, daha önce gösterdiğiniz gibi - dosyaların açıkça belirttiğinizde dosyaların benzer bir desenle gizleneceğini ifade eder .bash*. Sadece varsayılan dotglobayarı geçersiz kılar :
$ shopt -u dotglob # unset dotglob
$ ls .bash*
.bash_aliases .bash_history .bash_logout .bashrc .bashrc.save
Her neyse, bu tuhaflığın yanında, umarım bu, yüzeyin altında neler olduğunu anlamanıza yardımcı olur.
Diğer vardır shopteserlerini globbing nasıl değiştirebilir bayrakları: extglob, failglob, globstar, nocaseglobve nullglob. Onlar ve diğer shoptbayraklar bir sal Bash kılavuzunun bir parçası olarak belgelenmiştir .
Benzer şekilde, Desen Eşleştirme sayfasındaki bazı iyi okumalar gerekir.
¹ failglobveya nullglobayarlanmadığı sürece .