Question

Y at-il une façon plus élégante de le faire (shell bourne)?

IsThereAnyApplesLeft
applesLeft=$?

Normalement, dans c ou java je ferais:

applesLeft=IsThereAnyApplesLeft
Était-ce utile?

La solution

état de sortie est normalement utilisé implicitement comme ceci:

if IsThereAnyApplesLeft;then
   echo "Apples left"
fi

Autres conseils

Essayez:

applesLeft=$(IsThereAnyApplesLeft > /dev/null)$?

Et oui, vous avez à utiliser $? il n'y a pas moyen de l'éviter.

Les deux morceaux de code ne sont pas directement comparables. Votre exemple bash crée un sous-processus pour exécuter un fichier exécutable appelé « IsThereAnyApplesLeft », en attendant que le sous-processus pour terminer et le stockage du code de sortie du sous-processus dans la variable $? afin que vous puissiez l'examiner et agir en conséquence.

C'est en fait assez interaction complexe et de faire la même chose en C, il faudrait une quantité considérable de code. Il faudrait fork () un sous-processus, ont le parent wait4pid () sur le pid de l'enfant, tout en même temps chez l'enfant appelant execl () sur le fichier « IsThereAnyApplesLeft » pour le faire fonctionner. L'un des avantages de l'utilisation d'un langage de script shell est qu'il cache ce genre de choses de vous.

Par comparaison, l'extrait de code C est simplement appeler une fonction C et stocker le résultat dans une variable locale. Cela ressemblerait à ceci en bash:

IsThereAnyApplesLeft()
{
        echo 498
}

applesLeft=`IsThereAnyApplesLeft`
echo "there are $applesLeft apples left."

Qu'est-ce que ce n'est pas gracieux au sujet $??

Selon Advanced Bash Scripting Guide, il n'y a pas d'autre façon d'obtenir le code de sortie en plus $? - eh bien, ils ne liste pas d'autre façon de l'obtenir en plus $?. S'il y avait une autre façon, il aurait certainement été énumérés dans leur section de code de sortie dans le lien ci-dessus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top