La question est assez simple. Je peux obtenir le code de sortie de la commande précédente en utilisant $?
. mais qu'est ce que c'est exactement?
Je ne pense pas que ce soit une variable, car vous ne pouvez pas avoir de caractères spéciaux dans le nom de la variable autre que _
.
foo?foo=10
entraînera l'erreur: foo?foo=10: command not found
Donc, si ce n'est pas une variable, qu'est-ce que c'est? Y en a-t-il d'autres comme ça?
command-line
bash
daltonfury42
la source
la source
Réponses:
Qu'Est-ce que c'est?
$?
est une variable intégrée qui stocke l'état de sortie d'une commande, d'une fonction ou du script lui-même.$?
lit l'état de sortie de la dernière commande exécutée. Après le retour d'une fonction,$?
donne l'état de sortie de la dernière commande exécutée dans la fonction. C'est la façon dont Bash donne aux fonctions une "valeur de retour". Il retourne0
en cas de succès ou un entier dans la plage1 - 255
d'erreur.Y en a-t-il d'autres comme ça aussi?
Oui, il existe plusieurs de ces variables intégrées dans bash. Vous pouvez voir une liste ici . Voir: http://www.tldp.org/LDP/abs/html/exit-status.html
la source
dash
,ksh
,zsh
entre autres).$status
dans le même but$?
est une variable mais spéciale, c'est pourquoi les caractères spéciaux sont autorisés.($?)
Se développe jusqu'à l'état de sortie du dernier pipeline de premier plan exécuté.Ce n'est pas le seul, le shell traite spécialement plusieurs paramètres. Ces paramètres ne peuvent être référencés; leur affectation n'est pas autorisée:
Sources:
la source
"$*"
n'est pas seulement tous les paramètres positionnels comme un seul mot, mais tous les paramètres positionnels séparés par le premier caractère deIFS
comme un seul mot. Étant donné que le résultat sera sujet à une division de champ s'il n'est pas cité, l'effet est comme s'il$@
était utilisé dans le cas non cité .$?
est un paramètre shell spécial (variable).En général, toutes les variables définies par l'utilisateur doivent être nommées en utilisant uniquement les caractères de la classe de caractères,
[:alnum:]
c'est-à - dire[a-zA-Z0-9_]
(ne peuvent pas non plus commencer par[0-9]
).En résumé, il
$?
existe une variable spéciale ( et il y en a plusieurs ) qui peut être considérée comme une caractéristique interne du shell lui-même qui fournit le code de sortie de la commande précédente (qu'elle ait réussi ou échoué).Vous pouvez lire ceci pour avoir plus d'idée sur les variables.
la source
$?
est une variable spéciale dans bash qui contient toujours le code retour / sortie de la dernière commande exécutée.Vous pouvez le visualiser dans un terminal en exécutant
echo $?
.Les codes de retour sont dans la plage [0; 255].
Un code retour
0
signifie généralement que tout va bien.D'autres valeurs indiquent des erreurs. La plupart des applications renvoient
1
des valeurs personnalisées. Si aucune commande n'a été trouvée, la variable contient généralement127
Si vous souhaitez définir cette variable sur une valeur spécifique, vous pouvez facilement le faire avec
bash -c "exit 5"
pour retourner par exemple le code retour5
.la source
setstatus() { return 5; }