8
votes

Bash "pas": Inverser le statut de sortie d'une commande

Je sais que je peux faire cela ... XXX

Mais si je veux nier la condition que je vérifie? c'est-à-dire quelque chose comme ça (qui ne fonctionne évidemment pas) xxx

Je pourrais faire quelque chose comme ça ... xxx > Où je vérifie si l'état de sortie de la commande précédente est supérieur à 0. Mais cela se sent un peu maladroit. Y a-t-il un moyen plus idiomatique de faire cela?


1 commentaires

3 Réponses :


2
votes

Si vous voulez nier, vous recherchez ! code>: xxx pré>

ou (simple inverse les actions if / eus): p>

if cmp &>/dev/null $f1 $f2; then
    echo "$f1 $f2 are the same"
else
    echo >&2 "$f1 $f2 are NOT the same"
fi


0 commentaires

13
votes
if ! diff -q "$f1" "$f2"; then ...

0 commentaires

0
votes

nier Utiliser si! diff -q $ f1 $ f2; code>. Documenté dans test homme code>: xxx pré>

Pas tout à fait sûr pourquoi vous avez besoin de la négation, lorsque vous gérez les deux cas ... Si vous n'avez besoin que de gérer le cas où ils Ne correspondez pas: P>

diff -q $f1 $f2 || echo "they're different"


3 commentaires

Est-ce que cela invoque réellement le test cependant? Je n'utilise pas "test" ni "[".


Cela ne l'invoque pas, c'est une coquille intégrée (pour des raisons de performance), mais la syntaxe est la même


Test de l'homme n'est pas pertinent ici. De homme bash : _ si le mot réservé! précède un pipeline, l'état de sortie de ce pipeline est la négation logique de l'état de sortie décrite ci-dessus._