[2-57]oluşan bir karakter kümesidir 2, 3, 4, 5ve 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_sortseçenek ayarlanmışsa sayıları sayısal sırada sıralamak için bazı özel büyülerle ); oveya Oglob 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, file58maçları *<2-57>ile file5eşleşen *kısmı ve 8eşleştirme <2-57>kısmı. Desen *[^0-9]<2-57>bu sorunu önler.