[2-57]
adalah set karakter yang terdiri dari 2
, 3
, 4
, 5
dan 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_sort
opsi disetel); Anda dapat mengontrolnya dengan o
atau O
glob 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, file58
cocok *<2-57>
, dengan file5
mencocokkan *
bagian dan 8
mencocokkan <2-57>
bagian. Pola *[^0-9]<2-57>
menghindari masalah ini.