${paramètre:ind} : extrait de la valeur de paramètre la sous-chaîne débutant à l'indice ind.
L'indice du premier caractère d'une chaîne est 0.
Toutefois, il est possible de mentionner un indice ind négatif : -1 désigne le dernier caractère de la chaine, -2 l’avant-dernier, etc. Dans ce cas, il est impératif de placer un caractère espace entre le caractère : et le caractère – désignant le signe, sous peine d’obtenir un résultat erroné.
$ ch="abcdefghijk" $ # 01234567..10 $ $ echo ${ch:3} => sous-chaine commençant à l’indice 3 defghijk $ $ echo ${ch: -1} => il y a un caractère espace entre : et - k $ echo ${ch: -2} => sous-chaine commençant à l’avant-dernier caractère jk $
${paramètre:ind:nb} : extrait nb caractères à partir de l'indice ind.
L’indice ind peut être négatif, -1 désignant le dernier caractère de la chaine.
Le nombre nb peut également être négatif. Dans ce cas, nb ne désigne plus un nombre de caractères mais un indice en partant de la fin de la chaine. La syntaxe ind:nb désigne alors la sous-chaine débutant au caractère désigné par l’indice ind et se terminant avant le caractère désigné par l’indice nb.
$ echo ${ch:8:2} ij $ set ABCDEFGH $ $ echo ${1:4:3} EFG $ $ echo ${ch: -3:2} => chaine de deux caractères débutant à l’avant avant-dernier caractère ij $ $ set ABCDEFG $ # -7654321 => G (indice -1), F (indice -2), etc. $ $ echo ${1:1:-3} => B (indice 1), D (caractère avant le caractère d’indice -3) BCD $ $ echo ${1: -6:-2} => B (indice -6), E (caractère avant le caractère d’indice -2) BCDE $ $ echo ${1: -2:-6} => Attention à l’ordre des indices ! bash: -6 : expression de sous-chaîne négative $
Remarque : ces deux syntaxes extraient des sous-chaînes uniquement à partir de leur position. La commande unix expr, plus générale, permet d’extraire une sous-chaîne suivant un modèle exprimé sous la forme d’une expression régulière.
Syntaxes avec le paramètre spécial @ : ${@:ind} ${@:ind:nb}
Si ind est supérieur ou égal à 0, la syntaxe ${@:ind} est remplacée par la liste des valeurs des paramètres de positions initialisés dont le nom est supérieur ou égal à ind (pour rappel, $1 désigne la valeur du premier paramètre de position).
Si la valeur de ind est négative, -1 désigne le dernier paramètre de position initialisé, -2 l’avant-dernier paramètre de position initialisé, etc. Par conséquent, la syntaxe ${@:ind} est remplacée par la liste des valeurs des paramètres de positions initialisés commençant au paramètre de position référencé par ind.
Lorsque la syntaxe ${@:ind:nb} est utilisée, l’indice ind peut être positif, négatif ou nul. Par contre, il est interdit que nb soit négatif.
Si ind est supérieur ou égal à 0, la syntaxe ${@:ind:nb} est remplacée par la liste des nb paramètres de position initialisés, liste commençant avec le paramètre de position d'indice ind.
Si ind est négatif, elle est remplacée par la liste des nb paramètres de position initialisés, liste commençant avec le paramètre de position référencé par la valeur ind (-1 désigne le dernier paramètre de position initialisé).
$ set un deux trois quatre $ $ echo ${@:2} => liste commençant à $2 : $2 $3 … deux trois quatre $ $ echo ${@: -2} => liste commençant à l’avant-dernier paramètre de position. Il y a un caractère espace entre : et - trois quatre $ $ echo ${@:2:2} => liste constituée par $2 et $3 deux trois $ $ echo ${@: -2:1} => liste constituée par l’avant-dernier paramètre de position trois $a