일치하는 항목이 없으면 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
sum은 출력에서 얻은 합계와 일치하지 않는 행만 선택 하고 반환 코드로 0을 선택하도록 c
지시합니다 .grep
a
b
c
$ echo -e 'a\nb\nc' | grep -v a; echo $?
b
c
0