[2-57]è un insieme di caratteri composto da 2, 3, 4, 5e 7, in zsh e ogni altro jolly e sintassi regexp fuori. Il tuo modello glob *[2-57]corrisponde a tutti i nomi di file il cui ultimo carattere è una di quelle cinque cifre.
Penso che tu stia ricordando male la sintassi del [m,n] qualificatore glob . I qualificatori Glob vanno sempre tra parentesi alla fine del pattern e il separatore di intervallo è una virgola. Il modello si *([2,57])espande al 2 °, 3 °, ... 57 ° incontro. L'ordine di espansione predefinito è lessicografico (con qualche magia speciale per ordinare i numeri in ordine numerico se l' numeric_glob_sortopzione è impostata); puoi controllarlo con il qualificatore oo Oglob (ad es. *(om[2,57])per abbinare il 57 file più recente tranne quello più recente).
for x in /foo/bar/*([2,57]); do print $x; done
Non quello che hai chiesto, ma correlato e forse utile ai lettori futuri: se vuoi enumerare i file da 2 a 57, che esistano o meno, puoi usare un'espressione di parentesi graffa . Questa funzione esiste anche in bash e ksh.
echo hello{2..57}
E se si desidera abbinare i file il cui nome contiene un numero compreso tra 2 e 57, è possibile utilizzare il modello <2-57>. Questo è specifico di zsh.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Si noti che *<2-57>è probabile che un modello come non faccia quello che ci si aspetta, perché *potrebbe corrispondere anche alle cifre. Ad esempio, le file58corrispondenze *<2-57>, con la file5corrispondenza della *parte e la 8corrispondenza della <2-57>parte. Il modello *[^0-9]<2-57>evita questo problema.