"grep -q -v"가 한 줄 입력에만 작동하는 이유는 무엇입니까?

"grep -q -v"가 한 줄 입력에만 작동하는 이유는 무엇입니까?

일치하는 항목이 없으면 0을 반환하고 일치하는 항목이 있으면 1을 반환하는 grep -q조합을 사용 하면 입력이 한 줄인 한 작동합니다.-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.

하나의 행만 제공 하고 일치하지 않는 행만 선택 abc하도록 지시하는 경우 빈 출력을 얻고 1과 같은 코드를 반환합니다.grepa

a세 개의 행을 제공하는 경우 bsum은 출력에서 ​​얻은 합계와 일치하지 않는 행만 선택 하고 반환 코드로 0을 선택하도록 c지시합니다 .grepabc

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

관련 정보