[2-57]
oluşan bir karakter kümesidir 2
, 3
, 4
, 5
ve 7
, zsh ve diğer her joker ve regexp'in sözdiziminde orada. Glob şablonunuz *[2-57]
, son karakteri bu beş haneden biri olan her dosya adıyla eşleşir.
Bence dünya [m,n]
elemelerinin sözdizimini yanlış anlıyorsun . Glob niteleyicileri her zaman desenin sonunda parantez içinde bulunur ve aralık ayırıcı virgül olur. Desen *([2,57])
, 2., 3.,…, 57. eşleşmelere genişler. Varsayılan genişleme sırası sözlükbilimseldir ( numeric_glob_sort
seçenek ayarlanmışsa sayıları sayısal sırada sıralamak için bazı özel büyülerle ); o
veya O
glob niteleyici ile kontrol edebilirsiniz (örneğin *(om[2,57])
, en son bir dosya dışında en son 57 dosyayı eşleştirmek için).
for x in /foo/bar/*([2,57]); do print $x; done
İstediğiniz şey değil, ama ilgili ve gelecekteki okuyucular için muhtemelen yararlı olabilir: 2'den 57'ye kadar olan dosyaları numaralandırmak istiyorsanız, varsa veya olmasın, bir aralık ayracı ifadesi kullanabilirsiniz . Bu özellik bash ve ksh da mevcuttur.
echo hello{2..57}
Ayrıca adı 2 ile 57 arasında bir sayı içeren dosyalarla eşleştirmek istiyorsanız, deseni kullanabilirsiniz <2-57>
. Bu, zsh'ye özgüdür.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Bunun gibi bir kalitenin *<2-57>
beklediğiniz şeyi yapmayacağına dikkat edin, çünkü *
rakam da aynı olabilir. Örneğin, file58
maçları *<2-57>
ile file5
eşleşen *
kısmı ve 8
eşleştirme <2-57>
kısmı. Desen *[^0-9]<2-57>
bu sorunu önler.