
Siempre pensé que la -q
opción silenciosa ( ) debía usarse cuando se usaba grep
de forma condicional. Pero al volver a leer la man
página parece que debería funcionar sin ella.
Entonces, si quieres imprimir coincidencias y usarlas en forma condicional, ¿puedes hacer algo como
grep PATTERN FILE && do_something_else
Lo único que me hace dudar es que parece haber una ligera diferencia en el estado de salida.
Con -q
,
- grep "saldrá inmediatamente con estado cero si se encuentra alguna coincidencia,incluso si se detectó un error".
Sin-q
- "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.".
¿Pero no puedo pensar en un ejemplo en el que la diferencia se haga notable?
Respuesta1
He aquí un ejemplo:
$ echo "foo" > file
$ grep foo file wrongfile; echo "Exit status: $?"
file:foo
grep: wrongfile: No such file or directory
Exit status: 2
$ grep -q foo file wrongfile; echo "Exit status: $?"
Exit status: 0
Entonces, tenemos un archivo llamado file
que contiene la cadena foo
. Cuando ejecuté grep
on y inexistente , ya que -q
contenía una coincidencia, salí con el estado a pesar del error "No existe tal archivo". file
wrongfile
file
grep
0