Bash conditionnelle sur la commande code de sortie

En bash, je veux dire "si un fichier ne contient pas de XYZ, puis" faire un tas de choses. La façon la plus naturelle à la transposition de ce code est quelque chose comme:

if [ ! grep --quiet XYZ "$MyFile" ] ; then
   ... do things ...
fi

Mais bien sûr, ce n'est pas valable Bash syntaxe. Je pourrais utiliser backticks, mais là, je vais tester la sortie du fichier. Les deux solutions que je peux penser sont:

grep --quiet XYZ "$MyFile"
if [ $? -ne 0 ]; then
   ... do things ...
fi

Et

grep --quiet XYZ "$MyFile" ||
   (  ... do things ...
   )

Je préfère la deuxième, c'est plus Lispy et le || pour le contrôle de flux n'est pas si rare dans les langages de script. Je peux voir les arguments pour la première, trop, bien que lorsque la personne qui lit la première ligne, ils ne savent pas pourquoi vous êtes l'exécution de la commande grep, on dirait que vous êtes d'exécution pour principal effet, plutôt que de contrôler une branche dans le script.

Est-il un troisième, manière plus directe qui utilise un if déclaration et a la grep dans la condition?

OriginalL'auteur Martin C. Martin | 2013-08-19