[2-57]Jest to zestaw znaków składający się z 2, 3, 4, 5i 7, w zsh i każdego innego zamiennika i składni regexp tam. Twój wzorzec globu *[2-57]pasuje do każdej nazwy pliku, którego ostatnim znakiem jest jedna z tych pięciu cyfr.
Myślę, że źle pamiętasz składnię [m,n] kwalifikatora glob . Kwalifikatory glob zawsze znajdują się w nawiasach na końcu wzorca, a separatorem zakresu jest przecinek. Wzór *([2,57])rozwija się do 2., 3.,…, 57. dopasowania. Domyślna kolejność rozwijania jest leksykograficzna (z pewną specjalną magią do sortowania liczb w kolejności numerycznej, jeśli numeric_glob_sortopcja jest ustawiona); możesz kontrolować to za pomocą kwalifikatora olub Oglob (np. *(om[2,57])aby dopasować 57 najnowszy plik oprócz jednego najnowszego pliku).
for x in /foo/bar/*([2,57]); do print $x; done
Nie to, o co prosiłeś, ale powiązane i być może przydatne dla przyszłych czytelników: jeśli chcesz wyliczyć pliki od 2 do 57, czy istnieją, czy nie, możesz użyć wyrażenia nawiasowego zakresu . Ta funkcja istnieje również w bash i ksh.
echo hello{2..57}
A jeśli chcesz dopasować pliki, których nazwa zawiera liczbę od 2 do 57, możesz użyć wzorca <2-57>. Jest to specyficzne dla Zsh.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Pamiętaj, że podobny wzór *<2-57>prawdopodobnie nie spełni oczekiwań, ponieważ *może również pasować do cyfr. Na przykład file58dopasowania *<2-57>, z file5dopasowaniem *części i 8dopasowaniem <2-57>części. Wzór *[^0-9]<2-57>pozwala uniknąć tego problemu.