Quelles sont les variables spéciales du shell des signes dollar?

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