[2-57]é um conjunto de caracteres consistindo de 2, 3, 4, 5e 7, em zsh e qualquer outro wildcard e sintaxe regexp lá fora. Seu padrão glob *[2-57]corresponde a todos os nomes de arquivos cujo último caractere é um desses cinco dígitos.
Eu acho que você está se lembrando mal da sintaxe do [m,n] qualificador glob . Os qualificadores de globos sempre aparecem entre parênteses no final do padrão, e o separador de intervalo é uma vírgula. O padrão se *([2,57])expande para a 2ª, 3ª,…, 57ª correspondências. A ordem de expansão padrão é lexicográfica (com alguma mágica especial para classificar números em ordem numérica, se a numeric_glob_sortopção estiver configurada); você pode controlá-lo com o qualificador oou Oglob (por exemplo, *(om[2,57])para corresponder ao 57 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, se eles existem ou não, é possível usar uma expressão de intervalo entre chaves . Esse recurso também existe no bash e no ksh.
echo hello{2..57}
E se você deseja combinar arquivos cujo nome contém um número entre 2 e 57, você pode usar o padrão <2-57>. Isso é específico para o 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 faz o que você espera, porque também *pode corresponder a dígitos. Por exemplo, file58corresponde *<2-57>, com a file5correspondência da *parte e 8a <2-57>parte. O padrão *[^0-9]<2-57>evita esse problema.