Ketika Anda melakukan ls *
yang *
sedang diperluas sebelum ini dilewatkan ke ls
. Maksudnya jika kita memiliki tiga file ( a
, b
dan 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. ls
mencoba 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 dotglob
pengaturan 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 shopt
bendera yang mengubah cara globbing karya: extglob
, failglob
, globstar
, nocaseglob
dan nullglob
. Mereka dan rakit shopt
bendera lainnya didokumentasikan sebagai bagian dari manual Bash .
Demikian pula, halaman tentang Pencocokan Pola harus membuat bacaan yang baik.
¹ Kecuali failglob
atau nullglob
ditetapkan.