Dans Bash, il semble y avoir plusieurs variables qui contiennent des valeurs spéciales, cohérentes. Par exemple,
./myprogram &; echo $!
renverra le PID du processus qui a myprogram
. Je connais d’autres personnes, telles que $?
Je pense que c’est le TTY actuel. Y en a-t-il d’autres?
$1
, $2
, $3
, … sont les parameters de position . "$@"
est une construction de type tableau de tous les parameters de position, {$1, $2, $3 ...}
. "$*"
est l’extension IFS de tous les parameters de position, $1 $2 $3 ...
$#
est le nombre de parameters de position. $-
options actuelles définies pour le shell. $$
pid du shell actuel (pas sous-shell). $_
paramètre le plus récent (ou le chemin abs de la commande pour démarrer le shell en cours immédiatement après le démarrage). $IFS
est le séparateur de champs (en 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 des éléments ci-dessus se trouvent sous Paramètres spéciaux dans le Manuel de référence Bash. Il y a toutes les variables d’environnement définies par le shell .
Pour un index complet, veuillez vous reporter à l’ index des variables du manuel de référence .
$_
Dernier argument de la dernière commande $#
nombre d’arguments passés au script en cours $*
/ $@
liste des arguments passés au script sous forme de chaîne / liste délimitée Du haut de ma tête. Google pour les variables spéciales bash.
Pour aider à comprendre ce que font $#
, $0
et $1
, …, $n
do, j’utilise ce script:
#!/bin/bash for ((i=0; i<=$#; i++)); do echo "parameter $i --> ${!i}" done
En cours d’exécution il retourne 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
Prenez soin de certains des exemples; $ 0 peut inclure un chemin d’access ainsi que le nom du programme. Par exemple, enregistrez ce script de deux lignes sous le nom ./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