
일치 항목이 없으면 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이 됩니다.grep
a
a
, b
및 3개 라인을 제공하면 일치하지 않는 라인만 선택하도록 c
지시하면 출력에 및 0이 반환 코드로 표시됩니다 .grep
a
b
c
$ echo -e 'a\nb\nc' | grep -v a; echo $?
b
c
0