Pour spécifier un intervalle d’entiers, on utilise la syntaxe : {n1..n2[..pas]}
Les bornes de l’intervalle sont n1 et n2. Le shell remplace cette syntaxe par la liste des nombres entiers compris entre n1 et n2 inclus. Par défaut, le pas d’incrémentation est 1 (ou -1 si n1 > n2).
$ echo {4..23} 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $ $ echo {5..-7} 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 $
Il est possible d’ajouter un ou plusieurs 0 devant les bornes pour que l’affichage de chaque valeur s’effectue avec le même nombre de caractères.
$ echo {04..15} 04 05 06 07 08 09 10 11 12 13 14 15 $ $ echo {004..010} 004 005 006 007 008 009 010 $ $ echo {04..-7} 04 03 02 01 00 -1 -2 -3 -4 -5 -6 -7 $ $ echo {04..-07} 004 003 002 001 000 -01 -02 -03 -04 -05 -06 -07 $
De manière facultative, un troisième nombre pas peut fixer le pas d’incrémentation ou de décrémentation.
$ echo {-4..7..3} -4 -1 2 5 $
Les intervalles d’entiers sont utilisés pour créer rapidement des noms de fichiers numérotés ou des itérations.
$ touch fich{0..4} $ $ ls fich0 fich1 fich2 fich3 fich4 $
L’exemple ci-dessous utilise un intervalle d’entiers et une itération for pour afficher les dix chiffres.
$ for i in {0..9} > do > echo $i > done 0 1 2 3 4 5 6 7 8 9 $
Remarque :
le paramétrage des bornes d’un intervalle d’entiers ne peut s’effectuer directement car les substitutions ne sont pas interprétées à l’intérieur des accolades.
$ a=1 b=5 $ $ echo {$a..$b} {1..5} $
Pour que l’interprétation soit exécutée, on peut utiliser la commande interne eval. Cela permet, par exemple, de construire une itération paramétrée.
$ eval echo {$a..$b} 1 2 3 4 5 $ $ for i in $( eval echo {$a..$b} ) > do > echo $i > done 1 2 3 4 5 $