Dans Bash, il semble y avoir plusieurs variables qui contiennent des valeurs spéciales à signification cohérente. Par exemple,
./myprogram &; echo $!
renverra le PID du processus en arrière-plan myprogram
. J'en connais d'autres, $?
dont je pense qu'il s'agit de l'ATS actuel. Y en a-t-il d'autres?
bash
environment-variables
dollar-sign
Z Douglas
la source
la source
$'\n'
est un caractère littéral de nouvelle ligne qui résulte du remplacement du digraphe\n
par ASCII 10.${1}
,${*}
etc., les accolades sont juste pour homonymie, et souvent redondants. Isolé,${x}
est exactement équivalent à$x
.$!
dire? Je suis au courant,!$
mais pas de cela.Réponses:
$1
,$2
,$3
, ... sont les paramètres de position ."$@"
est une construction semblable à un tableau de tous les paramètres de position,{$1, $2, $3 ...}
."$*"
est l'expansion de l' IFS de tous les paramètres de position,$1 $2 $3 ...
.$#
est le nombre de paramètres positionnels.$-
options actuelles définies pour le shell.$$
pid du shell actuel (pas de sous-shell).$_
paramètre le plus récent (ou le chemin abs de la commande pour démarrer le shell courant immédiatement après le démarrage).$IFS
est le séparateur de champ (d'entrée).$?
est le dernier état de sortie de 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 de Bash. Il y a toutes les variables d'environnement définies par le shell .
Pour un indice complet, veuillez consulter l' Index des variables du manuel de référence .
la source
bash
page de manuel. La seule bizarrerie est qu'elle$_
n'est mentionnée que dans le cadre de son utilisation dans laMAILPATH
variable.man(1) bash
sous Paramètres spéciaux pour le reste de la définition de$_
.!$
place des$_
scripts bash, car ce dernier échoue parfois.!$
et$_
.$_
dernier argument de la dernière commande$#
nombre d'arguments passés au script actuel$*
/$@
liste des arguments passés au script sous forme de chaîne / liste délimitéeDu haut de ma tête. Google pour les variables spéciales bash.
la source
$@
c'est la chaîne et$*
est la liste délimitée (selon la réponse acceptée ci-dessus, de toute façon)."$@"
développe en une liste, se"$*"
développe en une seule chaîne. Le comportement spécial de$@
s'applique lorsqu'il se trouve entre guillemets doubles.Pour aider à comprendre quoi faire
$#
,$0
et$1
, ...,$n
faire, j'utilise ce script:Son exécution renvoie une sortie représentative:
la source
Faites attention à certains des exemples; $ 0 peut inclure un chemin d'accès principal ainsi que le nom du programme. Par exemple, enregistrez ce script sur deux lignes sous ./mytry.sh et exécutez-le.
Production:
Il s'agit d'une version actuelle (année 2016) de Bash, via Slackware 14.2
la source