11.3. Intervalles d’entiers

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
$

Combinés avec le mécanisme de génération de chaînes [cf. Chapitre 9, Chaînes de caractères §8], les intervalles d’entiers sont utilisés pour créer rapidement des noms de fichiers numérotés.

$ 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 :