[2-57]adalah set karakter yang terdiri dari 2, 3, 4, 5dan 7, di zsh dan setiap wildcard lain dan sintaks regexp di luar sana. Pola glob Anda *[2-57]cocok dengan setiap nama file yang karakter terakhirnya adalah salah satu dari lima digit itu.
Saya pikir Anda salah mengingat sintaksis [m,n] kualifikasi glob . Kualifikasi global selalu menggunakan tanda kurung di akhir pola, dan pemisah rentang adalah koma. Pola *([2,57])meluas ke pertandingan ke-2, ke-3, ..., ke-57. Urutan ekspansi standar adalah leksikografis (dengan beberapa sihir khusus untuk mengurutkan angka dalam urutan numerik jika numeric_glob_sortopsi disetel); Anda dapat mengontrolnya dengan oatau Oglob qualifier (misalnya *(om[2,57])untuk mencocokkan 57 file terbaru kecuali satu file terbaru).
for x in /foo/bar/*([2,57]); do print $x; done
Bukan yang Anda minta, tetapi terkait dan mungkin bermanfaat bagi pembaca di masa mendatang: jika Anda ingin menghitung file 2 hingga 57 apakah ada atau tidak, Anda dapat menggunakan ekspresi kurung kurawal . Fitur ini juga ada di bash dan ksh.
echo hello{2..57}
Dan jika Anda ingin mencocokkan file yang namanya berisi angka antara 2 dan 57, Anda dapat menggunakan polanya <2-57>. Ini khusus untuk zsh.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Perhatikan bahwa pola suka *<2-57>cenderung tidak melakukan apa yang Anda harapkan, karena angka tersebut *dapat cocok dengan angka juga. Misalnya, file58cocok *<2-57>, dengan file5mencocokkan *bagian dan 8mencocokkan <2-57>bagian. Pola *[^0-9]<2-57>menghindari masalah ini.