On ne doit pas confondre le résultat d'une commande et son code de retour : le résultat correspond à ce qui est écrit sur sa sortie standard ; le code de retour indique uniquement si l'exécution de la commande s'est bien effectuée ou non.
Parfois, on est intéressé uniquement par le code de retour d'une commande et non par les résultats qu'elle produit sur la sortie standard ou la sortie standard pour les messages d'erreurs.
$ grep toto pass > /dev/null 2>&1 => ou bien : grep toto pass &>/dev/null $ $ echo $? 1 => on en déduit que la chaîne toto n'est pas présente dans pass $