[2-57]
è un insieme di caratteri composto da 2
, 3
, 4
, 5
e 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_sort
opzione è impostata); puoi controllarlo con il qualificatore o
o O
glob (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 file58
corrispondenze *<2-57>
, con la file5
corrispondenza della *
parte e la 8
corrispondenza della <2-57>
parte. Il modello *[^0-9]<2-57>
evita questo problema.