[2-57] é um conjunto de caracteres que consiste em 2 , 3 , 4 , 5 e 7 , em zsh e todas as outras sintaxes de caracteres curinga e expressões regulares no mercado. Seu padrão de glob *[2-57] corresponde a cada nome de arquivo cujo último caractere é um desses cinco dígitos.
Acho que você está se lembrando incorretamente da sintaxe do [m,n] qualificador da glob . Qualificadores de Glob sempre ficam entre parênteses no final do padrão, e o separador de intervalo é uma vírgula. O padrão *([2,57]) se expande para o 2º, 3º, ..., 57º. A ordem de expansão padrão é lexicográfica (com alguma mágica especial para classificar números em ordem numérica se a opção numeric_glob_sort estiver configurada); você pode controlá-lo com o qualificador o ou O glob (por exemplo, *(om[2,57]) para corresponder ao arquivo mais recente, exceto o arquivo mais recente).
for x in /foo/bar/*([2,57]); do print $x; done
Não é o que você pediu, mas relacionado e possivelmente útil para futuros leitores: se você quiser enumerar os arquivos 2 a 57, independentemente de existirem ou não, você pode usar um intervalo expressão de colchetes . Este recurso também existe em bash e ksh.
echo hello{2..57}
E se você quiser corresponder arquivos cujo nome contenha um número entre 2 e 57, use o padrão <2-57> . Isso é específico para zsh.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Observe que um padrão como *<2-57> provavelmente não fará o que você espera, porque o * também pode corresponder aos dígitos. Por exemplo, file58 corresponde a *<2-57> , com file5 correspondendo à parte * e 8 correspondendo à parte <2-57> . O padrão *[^0-9]<2-57> evita esse problema.