[2-57]est un jeu de caractères consistant 2, 3, 4, 5et 7, dans zsh et tous les autres caractères génériques et la syntaxe regexp là - bas. Votre modèle de glob *[2-57]correspond à chaque nom de fichier dont le dernier caractère est l'un de ces cinq chiffres.
Je pense que vous vous souvenez mal de la syntaxe du [m,n] qualificatif glob . Les qualificatifs globaux sont toujours placés entre parenthèses à la fin du modèle et le séparateur de plage est une virgule. Le motif *([2,57])s'étend aux 2e, 3e,… et 57e matchs. L'ordre d'extension par défaut est lexicographique (avec une magie spéciale pour trier les nombres dans l'ordre numérique si l' numeric_glob_sortoption est définie); vous pouvez le contrôler avec le qualificatif oor Oglob (par exemple *(om[2,57])pour faire correspondre le 57 fichier le plus récent à l'exception du fichier le plus récent).
for x in /foo/bar/*([2,57]); do print $x; done
Pas ce que vous avez demandé, mais lié et peut-être utile aux futurs lecteurs: si vous voulez énumérer les fichiers 2 à 57, qu'ils existent ou non, vous pouvez utiliser une expression d'accolade de plage . Cette fonctionnalité existe également dans bash et ksh.
echo hello{2..57}
Et si vous souhaitez faire correspondre des fichiers dont le nom contient un nombre compris entre 2 et 57, vous pouvez utiliser le modèle <2-57>. Ceci est spécifique à zsh.
$ ls
file1 file2 file3 file57 file58
$ echo file<2-57>
file2 file3 file57
Notez qu'un modèle comme *<2-57>ne fera probablement pas ce que vous attendez, car il *pourrait également correspondre à des chiffres. Par exemple, file58correspond *<2-57>, avec file5correspondance de la *pièce et 8correspondance de la <2-57>pièce. Le motif *[^0-9]<2-57>évite ce problème.