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 *
*
ls
a
b
c
ls *
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. ls
tam 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 dotglob
ayarı 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 shopt
eserlerini globbing nasıl değiştirebilir bayrakları: extglob
, failglob
, globstar
, nocaseglob
ve nullglob
. Onlar ve diğer shopt
bayraklar bir sal Bash kılavuzunun bir parçası olarak belgelenmiştir .
Benzer şekilde, Desen Eşleştirme sayfasındaki bazı iyi okumalar gerekir.
¹ failglob
veya nullglob
ayarlanmadığı sürece .