Ketika Anda melakukan ls *yang *sedang diperluas sebelum ini dilewatkan ke ls. Maksudnya jika kita memiliki tiga file ( a, bdan c) dalam direktori ls *yang benar-benar berjalan ls a b c.
Ketika Bash tidak bisa mengembang, ia melewati string mentah¹. Itu sebabnya Anda melihat wildcard dalam kesalahan, bersama dengan pesan yang tidak ditemukan. lsmencoba menampilkan daftar untuk file yang dipanggil secara harfiah *.bash*.
Jadi mengapa itu tidak berkembang? Nah dengan globbing default (apa yang disebut ekspansi wildcard ini) tidak akan mengembalikan file yang tersembunyi. Anda dapat mengubah ini dengan shopt -s dotglob(yang tidak akan bertahan kecuali Anda memasukkannya ke dalam .bashrc- itu mungkin dinonaktifkan secara default karena alasan yang baik jadi hati-hati dengan itu), inilah demo cepat:
$ 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
Pengecualian untuk ini adalah -seperti Anda sudah shown- ketika Anda sudah secara eksplisit dinyatakan file akan tersembunyi dengan pola seperti .bash*. Ini hanya mengesampingkan dotglobpengaturan default :
$ shopt -u dotglob # unset dotglob
$ ls .bash*
.bash_aliases .bash_history .bash_logout .bashrc .bashrc.save
Lagi pula selain kekhasan itu, saya harap ini membantu Anda memahami apa yang terjadi di bawah permukaan.
Ada yang lain shoptbendera yang mengubah cara globbing karya: extglob, failglob, globstar, nocaseglobdan nullglob. Mereka dan rakit shoptbendera lainnya didokumentasikan sebagai bagian dari manual Bash .
Demikian pula, halaman tentang Pencocokan Pola harus membuat bacaan yang baik.
¹ Kecuali failglobatau nullglobditetapkan.