「grep -q -v」が単一行入力でのみ機能するのはなぜですか?

「grep -q -v」が単一行入力でのみ機能するのはなぜですか?

grep -qを と組み合わせて使用​​して-v、一致がない場合は 0 を返し、一致する場合は 1 を返すようにすると、入力が 1 行である限り機能します。

$ echo 'abc' | grep -q -v a; echo $?
1
$ echo 'abc' | grep -q -v x; echo $?
0

ただし、入力が複数行の場合、grep は常に 0 を返します。

$ echo -e 'a\nb\nc' | grep -q -v a; echo $?
0
$ echo -e 'a\nb\nc' | grep -q -v x; echo $?
0

このような行動の理由は何でしょうか?

この場合の正しい方法は! grep -qの代わりにを使用することだとわかっていますgrep -q -vが、それでも答えを知りたいです。

答え1

grep マニュアルによると:

-v, --invert-match
         Selected lines are those not matching any of the specified patterns.

1 行のみを指定してabcgrep一致しない行のみを選択するように指示するとa、空の出力と 1 に等しい戻りコードが返されます。

a、、の 3 つの行を指定してb、一致しない行だけを選択するようにc指示すると、出力に と が返され、戻りコードとして 0 が返されます。grepabc

$ echo -e 'a\nb\nc' | grep -v a; echo $?
b
c
0

関連情報