26 votes

Qu'est-ce que `$?` ? Est-ce une variable ?

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 d'une variable autre que _.

foo?foo=10

résultera en 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 semblables?

25voto

Ron Points 19655

Qu'est-ce que c'est?

$? est une variable intégrée qui stocke le code de sortie d'une commande, d'une fonction ou du script lui-même.

$? lit le code de sortie de la dernière commande exécutée. Après qu'une fonction retourne, $? donne le code de sortie de la dernière commande exécutée dans la fonction. C'est la manière de Bash de donner aux fonctions une "valeur de retour". Il renvoie 0 en cas de succès ou un entier dans la plage 1 - 255 en cas d'erreur.

Y en a-t-il d'autres comme celui-ci également?

Oui, il y a plusieurs variables intégrées de ce type en bash. Vous pouvez voir une liste ici. Référence: http://www.tldp.org/LDP/abs/html/exit-status.html

25voto

Sylvain Pineau Points 59212

$? est une variable mais une spéciale, c'est pourquoi les caractères spéciaux sont autorisés. ($?) S'étend à l'état de sortie du pipeline en premier plan exécuté le plus récemment.

Il n'est pas le seul, le shell traite plusieurs paramètres de manière spéciale. Ces paramètres ne peuvent être que référencés; il n'est pas permis de leur affecter une valeur :

Variable    Signification
$0          Nom de script
$1          Paramètre positionnel #1
$2 - $9     Paramètres positionnels #2 - #9
${10}       Paramètre positionnel #10
$#          Nombre de paramètres positionnels
"$*"        Tous les paramètres positionnels (en un seul mot) *
"$@"        Tous les paramètres positionnels (en tant que chaînes distinctes)
${#*}       Nombre de paramètres positionnels
${#@}       Nombre de paramètres positionnels
$?          Valeur de retour
$$          ID de processus (PID) du script
$-          Drapeaux passés au script (en utilisant set)
$_          Dernier argument de la commande précédente
$!          ID de processus (PID) de la dernière tâche exécutée en arrière-plan

* Doit être mis entre guillemets, sinon il est par défaut équivalent à $@.

Sources:

6voto

Byte Commander Points 99026

$? est une variable spéciale en bash qui contient toujours le code de retour de la dernière commande exécutée.

Vous pouvez le voir dans un terminal en exécutant echo $?.

Les codes de retour sont dans la plage [0; 255].
Un code de retour de 0 signifie généralement que tout va bien.
D'autres valeurs indiquent des erreurs. La plupart des applications retournent 1 ou des valeurs personnalisées. Si une commande n'est pas trouvée, la variable contient généralement 127

Si vous voulez définir cette variable sur une valeur spécifique, vous pouvez facilement le faire avec bash -c "exit 5" pour par exemple obtenir le code de retour 5.

6voto

heemayl Points 85741

$? est un paramètre spécial de shell (variable).

En général, toutes les variables définies par l'utilisateur doivent être nommées en n'utilisant que 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é, $? est une variable spéciale (et il y en a plusieurs autres) qui peut être considérée comme une fonction interne du shell lui-même qui fournit le code de sortie de la commande précédente (réussie ou échouée).

Vous pouvez lire ceci pour avoir une meilleure idée sur les variables.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X