Deux styles de vérifier la valeur de retour en ksh
En ksh shell, je veux vérifier la valeur de retour après l'exécution d'une commande, j'ai écrit deux styles:
if [ $? -ne 0 ] ; then
echo "failed!"
exit 1
else
exit 0
fi
[ $? -ne 0 ] && echo "failed!" && exit 1
Sont-ils équivalents? Si non, que dois-je faire si je veux l'écrire en une seule ligne?
OriginalL'auteur user1317752 | 2012-06-29
Vous devez vous connecter pour publier un commentaire.
Ils sont proches, mais pas identiques. Tout d'abord, le
if
va exécuter laexit 1
même si leecho
échoué pour une raison quelconque; les enchaînés d'expression ne sera pas. Aussi, les enchaînés version ne dispose pas d'un équivalent de laelse exit 0
.Une meilleure équivalent serait celui-ci:
C'est taggés
ksh
, de sorte que vous pourriez trouver la syntaxe d'expression numérique nettoyant:Mais vous pouvez également écrire une
if
sur une seule ligne, si vous le souhaitez:Si la commande que vous venez a couru au-dessus de cette expression, en vue de définir
$?
est court, vous pouvez simplement utiliser directement lesif
expression - avec inversée clauses, depuis le code de sortie 0 est vraie:Il n'a pas d'importance pour ce cas simple, mais, en général, vous voulez probablement pour éviter
echo
. Au lieu de cela, utiliserprintf
- ou si vous n'avez pas l'esprit d'être ksh-seulement, vous pouvez utiliserprint
. Le problème avececho
est qu'il ne fournit pas un moyen de traiter avec bizarre chaînes dans les variables:Alors que les deux
printf
etprint
faire:Encore, pas un problème ici, ou en tout temps vous êtes simplement l'impression d'une chaîne littérale, mais j'ai trouvé qu'il était plus facile de m'entraîner hors de la
echo
habitude entièrement.Pourquoi
print
est mieux queecho
en ksh?J'ai édité pour ajouter une réponse à cette question. En fait, je peux recommander
printf
(dans les versions modernes deksh
qui l'ont), parce qu'il est portable sur les coquilles.OriginalL'auteur Mark Reed