Attention, les fonctionnalités présentées ici sont spécifiques à l'interpréteur bash, et ne fonctionneront pas dans d'autres interpréteurs, en particulier ceux qui se limitent aux fonctionnalités définies dans la norme POSIX (ou lorsque bash est exécuté en mode POSIX).
Accéder à un paramètre positionnel indexé sur le dernier argument
Dans un script ou une fonction shell, on a souvent besoin d'accéder à un
argument qui lui a été passé. C'est simple quand on connaît précisément son
indice dans la liste des arguments, grâce aux variables $1
, $2
, ...
Mais ces arguments sont également accessibles via les tableaux $@
et $*
.
Grâce aux fonctionnalités spécifiques à l'interpréteur bash, il est ainsi
possible, entre autres, d'accéder à un paramètre dont on connaît la position
depuis la fin de la liste des paramètres. Par exemple :
{
)
}
Attention : il ne faut pas oublier de placer une espace entre le deux-points
et le tiret, pour éviter que bash ne confonde avec :-
, qui représente
l’utilisation de valeur par défaut.
Autres possibilités similaires
Lecture d'arguments à l'aide de chaînes de caractères
Voici quelques exemples où l'on récupère une chaîne de caractères contenant un
ou plusieurs paramètres positionnels (séparés par le premier caractères de la
variables IFS
– ou une espace si celle-ci n'est pas définie –, comme c'est
toujours le cas entre des guillemets doubles avec les tableaux indicés par *
ou avec $*
) :
- ici, on initialise puis affiche ici la chaîne de caractères
s
qui contiendra le dernier paramètre positionnel de la fonctionf
:{ s=""; ; } )
- là, la chaîne de caractères
s
contiendra les deux derniers arguments (séparés par une espace) :{ s=""; ; } )
Lecture d'arguments à l'aide de tableaux
Et ci-dessous figurent quelques exemples où l'on initialise un tableau
contenant un ou plusieurs paramètres positionnels (résultant de l'expansion
habituelle entre des guillements doubles de tableaux indicés par @
ou avec
$@
) avant d'afficher l'ensemble de leurs éléments (séparés par une espace) :
- ci-dessous,
t
représente un tableau avec 2 paramètres positionnels à partir du deuxième paramètre de la fonction, c'est à dire l'équivalent det=("$2" "$3")
:
{ t=(""); ; }
)
- ici,
t
sera un tableau contenant deux paramètres positionnels consécutifs, dont le premier est le troisième argument de la fonction en comptant à l'envers à partir du dernier :
{ t=(""); ; }
)
- enfin, dans ce dernier exemple,
t
sera contenant les cinq derniers arguments positionnels de la fonction (le tableau sera vide si celle-ci a moins de 5 arguments):
{ t=(""); ; }
)