Secondo man grep
pagina, -c
flag è per
-c, --countSuppress output normale; stampa invece un conteggio delle righe corrispondenti per ogni file di input.
Quindi quello che stai vedendo è il conteggio del match e da non confondere con il codice di uscita del grep
incontro. Il codice 1
è a causa di nessuna riga corrispondente dall'input.
Dai un'occhiata all'altro caso,
echo 'No' | grep -c No
1
echo $?
0
Da leggere anche su EXIT CODES
su man grep
pagina,
STATO DI USCITANormalmente lo stato di uscita è 0 se è selezionata una linea, 1 se non è stata selezionata alcuna linea e 2 se si è verificato un errore.
Il codice di uscita è 1 perché grep.
non ha trovato corrispondenzaSTATO DI USCITALo stato di uscita è 0 se le righe selezionate vengono trovate e 1 se non viene trovato. Se si è verificato un errore, lo stato di uscita è 2. (Nota:il codice di gestione degli errori POSIX dovrebbe verificare la presenza di '2' o superiore.)
L'output è zero perché il conteggio di 'Totale' è zero. Ciò è dovuto all'opzione -c:
-c, --countSuppress output normale; stampa invece un conteggio delle righe corrispondenti per ogni file di input. Con l'opzione -v, --invert-match (vedi sotto), conta le righe non corrispondenti. (-c è specificato da POSIX.)
Se desideri forzare un codice di uscita pari a 0, puoi semplicemente aggiungere || true
al tuo comando:
echo 'Total' | grep -c No || true