Según man grep
página, -c
la bandera es para
-c, --countSuppress salida normal; en su lugar, imprima un recuento de líneas coincidentes para cada archivo de entrada.
Entonces, lo que está viendo es el recuento de la coincidencia y no debe confundirse con el código de salida del grep
juego. El código 1
se debe a que no hay líneas que coincidan con la entrada.
Echa un vistazo al otro caso,
echo 'No' | grep -c No
1
echo $?
0
También para leer en EXIT CODES
el man grep
página,
ESTADO DE SALIDA Normalmente, el estado de salida es 0 si se selecciona una línea, 1 si no se seleccionó ninguna línea y 2 si se produjo un error.
El código de salida es 1 porque grep no encontró coincidencias.
ESTADO DE SALIDA El estado de salida es 0 si se encuentran las líneas seleccionadas y 1 si no se encuentran. Si se produjo un error, el estado de salida es 2. (Nota:el código de manejo de errores POSIX debe buscar '2' o más).
La salida es cero porque el recuento de 'Total' es cero. Esto debido a la opción -c:
-c, --countSuppress salida normal; en su lugar, imprima un recuento de líneas coincidentes para cada archivo de entrada. Con la opción -v, --invert-match (ver más abajo), cuenta las líneas que no coinciden. (-c está especificado por POSIX.)
Si desea forzar un código de salida de 0, simplemente puede agregar || true
a su orden:
echo 'Total' | grep -c No || true