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

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

一致するものがない場合は 0 を返し、一致するものがある場合は 1 を返すgrep -q組み合わせを使用すると、入力が 1 行の 1 つ動作します。-v

$ 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行だけを提供し、一致しない行のみを選択するabcように指示した場合は、空の出力を取得して1のようなコードを返します。grepa

a3つの行を提供する場合、bsumは出力から得られた合計と一致しない行のみを選択し、戻りコードとして0を選択するようにc指示します。grepabc

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

おすすめ記事