web-dev-qa-db-fra.com

Quelles sont les variables Shell du signe dollar spécial?

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?

734
Z Douglas
  • $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 .

1256
kojiro
  • $_ 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ée

du haut de ma tête. Google pour les variables spéciales bash.

46
Dan

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
13
fedorqui

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

4
Adrian Cole