Dans Bash, plusieurs variables semblent contenir des valeurs spéciales ayant une signification constante. Par exemple,
./myprogram &; echo $!
renverra le PID du processus qui a mis en arrière-plan myprogram
. Je connais d’autres, comme $?
, qui, à mon avis, est le TTY actuel. Y en a-t-il d'autres?
$1
, $2
, $3
, ... sont les paramètres de position ."$@"
est une construction de type tableau de tous les paramètres de position, {$1, $2, $3 ...}
."$*"
est l'extension IFS de tous les paramètres de position, $1 $2 $3 ...
.$#
est le nombre de paramètres de position.$-
options en cours définies pour le shell.$$
pid du shell actuel (pas de sous-shell).$_
paramètre le plus récent (ou chemin abs de la commande permettant de démarrer le shell en cours immédiatement après le démarrage).$IFS
est le séparateur de champs (d'entrée).$?
est le dernier état de sortie du pipeline de premier plan.$!
est le PID de la commande d'arrière-plan la plus récente.$0
est le nom du shell ou du script shell.La plupart de ce qui précède se trouve sous Paramètres spéciaux dans le manuel de référence de Bash. Il y a tous les variables d'environnement définies par le shell .
Pour un index complet, veuillez vous reporter à Index de variable du manuel de référence .
$_
dernier argument de la dernière commande$#
nombre d'arguments passés au script actuel$*
/$@
liste d'arguments transmis au script sous forme de liste/liste délimitéedu haut de ma tête. Google pour les variables spéciales bash.
Pour aider à comprendre ce que font $#
, $0
et $1
, ..., $n
, j'utilise ce script:
#!/bin/bash
for ((i=0; i<=$#; i++)); do
echo "parameter $i --> ${!i}"
done
Son exécution renvoie une sortie représentative:
$ ./myparams.sh "hello" "how are you" "i am fine"
parameter 0 --> myparams.sh
parameter 1 --> hello
parameter 2 --> how are you
parameter 3 --> i am fine
Faites attention à certains exemples. $ 0 peut inclure un chemin principal ainsi que le nom du programme. Par exemple, enregistrez ce script de deux lignes en tant que ./mytry.sh et exécutez-le.
#!/bin/bash
echo "parameter 0 --> $0" ; exit 0
Sortie:
parameter 0 --> ./mytry.sh
Ceci est sur une version actuelle (année 2016) de Bash, via Slackware 14.2