Dans mon terminal, il imprima un nombre apparemment aléatoire 127
. Je pense qu'il imprime la valeur de la variable et de vérifier ma suspicion, j'ai défini une nouvelle variable v=4
. Fonctionnement echo $?
encore m'a donné 0
comme sortie.
Je suis confus car je m'attendais à ce que 4 soit la réponse.
De man bash
:
$? Se développe à l'état de sortie du pipeline de premier plan le plus récemment exécuté.
echo $?
retournera l'état de sortie de la dernière commande. Vous avez 127
C'est l'état de sortie de la dernière commande exécutée sorti avec une erreur (la plupart probablement). Commandes sur la sortie d'achèvement réussie avec un statut de sortie de 0
(le plus probable). La dernière commande a donné la sortie 0
Depuis le echo $v
Sur la ligne précédente terminée sans erreur.
Si vous exécutez les commandes
v=4
echo $v
echo $?
Vous obtiendrez une sortie comme suit:
4 (from echo $v)
0 (from echo $?)
Essayez aussi:
true
echo $?
Tu auras 0
.
false
echo $?
Tu auras 1
.
La commande true
ne fait rien, il sort simplement avec un code d'état 0
; et la commande false
_ ne fait pas non plus rien, il sort simplement avec un code d'état indiquant une défaillance (c'est-à-dire avec code d'état 1
).
$?
est utile dans les shellscripts comme moyen de décider quoi faire en fonction de la fonctionnalité de la commande précédente (vérification du statut de sortie). Nous pouvons nous attendre à ce que le statut de sortie soit 0
Lorsque la commande précédente a fonctionné (terminé avec succès), sinon une valeur numérique non nulle.
Exemple de démonstration:
#!/bin/bash
patience=3
read -t "$patience" -p "Press 'Enter' if you run Unix or Linux, otherwise press 'ctrl+d' "
status="$?"
if [[ $status -eq 0 ]]
then
echo "That's great :-)"
Elif [[ $status -eq 1 ]]
then
echo "(exit status=$status)
You are welcome to try Unix or Linux :-)"
else
echo "(exit status=$status)
You did not answer within $patience seconds. Anyway :-)"
fi
echo "'Unix & Linux' is a question/answer web site for
Unix and Linux operating systems"
Vous pouvez demander comment exécuter un shellscript Bash sans Unix ou Linux ;-)