Dalam bash, saya mencoba
ls [a-z]*
dan diharapkan untuk membuat daftar semua file dengan nama file dimulai dengan huruf kecil. Tetapi mengapa file dengan nama dimulai dengan huruf besar juga ditampilkan?
>ls [a-z]*
D e
>
Jika perlu, versi bash:
bash --versi GNU bash, versi 4.1.5 (1) -release (i486-pc-linux-gnu) Hak Cipta (C) 2009 Free Software Foundation, Inc. Lisensi GPLv3 +: GNU GPL versi 3 atau lebih baru http: // gnu .org / lisensi / gpl.html
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
LC_COLLATE
pengaturan Di beberapa (banyak?) lokal,[a-z]
termasuk "aAbB ... yYz" tetapi tidak "Z". Anda dapat mengaktifkan globbing diperpanjang menggunakanshopt -s extglob
. Saya mendapatkan hasil berbeda untuk[a-z]
dan[[:lower:]]
di Cygwin.Jawaban:
Ini bukan regexp, yang merupakan penyebab kebingungan. Sebaliknya, ia menggunakan sistem yang disebut "globbing" - lihat:
Alih-alih [az] Anda harus menggunakan [[: lebih rendah:]] seperti:
sumber
1) Ini mungkin tergantung pada sistem operasi Anda, lebih khusus sistem file Anda. Apakah case sistem file Anda sensitif? Anda tidak menyebutkan OS, atau tipe sistem file.
2) bash juga dapat melakukan globbing case sensitif. Anda dapat memeriksa untuk melihat apakah ini kasus Anda saat ini dengan
shopt | grep nocaseglob
Juga, sebagai tambahan, ingat bahwa
ls
tidak melakukan apa pun dengan file. Shell Anda, lalu meneruskan nama file ke ls.sumber