Selon man grep
page, -c
le drapeau est pour
-c, --countSuppress sortie normale ; à la place, imprimez un nombre de lignes correspondantes pour chaque fichier d'entrée.
Donc, ce que vous voyez est le décompte du match et à ne pas confondre avec le code de sortie du grep
match. Le code 1
est dû au fait qu'aucune ligne ne correspond à l'entrée.
Jetez un oeil à l'autre cas,
echo 'No' | grep -c No
1
echo $?
0
A lire aussi sur EXIT CODES
le man grep
pages,
ETAT DE SORTIE Normalement, l'état de sortie est 0 si une ligne est sélectionnée, 1 si aucune ligne n'a été sélectionnée et 2 si une erreur s'est produite.
Le code de sortie est 1 car rien n'a été trouvé par grep.
STATUT DE SORTIELe statut de sortie est 0 si les lignes sélectionnées sont trouvées, et 1 si elles ne sont pas trouvées. Si une erreur s'est produite, le statut de sortie est 2. (Remarque :le code de gestion des erreurs POSIX doit vérifier '2' ou plus.)
La sortie est zéro car le compte de 'Total' est zéro. Cela est dû à l'option -c :
-c, --countSuppress sortie normale ; à la place, imprimez un nombre de lignes correspondantes pour chaque fichier d'entrée. Avec l'option -v, --invert-match (voir ci-dessous), comptez les lignes qui ne correspondent pas. (-c est spécifié par POSIX.)
Si vous souhaitez forcer un code de sortie de 0, vous pouvez simplement ajouter || true
à votre commande :
echo 'Total' | grep -c No || true