[2-57]
es un conjunto de caracteres que consiste en 2
, 3
, 4
, 5
y 7
, en zsh y cualquier otro comodín y la sintaxis de expresiones regulares que hay. Su patrón global *[2-57]
coincide con cada nombre de archivo cuyo último carácter es uno de esos cinco dígitos.
Creo que no recuerda la sintaxis del [m,n]
calificador global . Los calificadores Glob siempre van entre paréntesis al final del patrón, y el separador de rango es una coma. El patrón se *([2,57])
expande al 2º, 3º,…, 57º partido. El orden de expansión predeterminado es lexicográfico (con algo de magia especial para ordenar los números en orden numérico si la numeric_glob_sort
opción está configurada); puede controlarlo con el calificador o
o O
glob (por ejemplo, *(om[2,57])
para que coincida con el 57 archivo más reciente, excepto el archivo más reciente).
for x in /foo/bar/*([2,57]); do print $x; done
No es lo que solicitó, sino relacionado y posiblemente útil para futuros lectores: si desea enumerar los archivos 2 a 57, ya sea que existan o no, puede usar una expresión de llaves de rango . Esta característica también existe en bash y ksh.
echo hello{2..57}
Y si desea hacer coincidir archivos cuyo nombre contiene un número entre 2 y 57, puede usar el patrón <2-57>
. Esto es específico de zsh.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Tenga en cuenta que *<2-57>
es probable que un patrón como no haga lo que espera, porque también *
podría coincidir con los dígitos. Por ejemplo, file58
coincide *<2-57>
, con la file5
coincidencia de la *
parte y la 8
coincidencia de la <2-57>
parte. El patrón *[^0-9]<2-57>
evita este problema.