![awk의 system() 호출이 왜 이렇게 작동합니까?](https://linux55.com/image/165933/awk%EC%9D%98%20system()%20%ED%98%B8%EC%B6%9C%EC%9D%B4%20%EC%99%9C%20%EC%9D%B4%EB%A0%87%EA%B2%8C%20%EC%9E%91%EB%8F%99%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
awk 내에서 grep을 수행하기 위해 system()을 사용하려고 합니다. 설명서에 따르면 grep은 실행 중인 명령의 종료 코드를 반환하도록 되어 있습니다.
$ cat foo.txt
bar
$ grep -q bar foo.txt; echo $?
0
$ awk 'BEGIN{ if ( system( "grep -q bar foo.txt" ) ) { print "yes" } else { print "no" } }'
no
삭제하면 -q
grep이 해당 항목을 찾은 것을 볼 수 있으므로 bar
0으로 종료되어야 하므로 yes, no?가 인쇄됩니다.
$ awk 'BEGIN{ if ( system( "grep bar foo.txt" ) ) { print "yes" } else { print "no" } }'
bar
no
grep
방정식에서 완전히 제거하십시오.
$ awk 'BEGIN{ if ( system( "true" ) ) { print "yes" } else { print "no" } }'
no
답변1
셸에서 종료 코드 0은 명령의 성공을 나타내고 다른 종료 코드는 실패(및 그 이유)를 나타냅니다. system
반환되는 내용 은 다음과 같습니다 . 0은 성공을 나타내지만 awk
FALSE로 해석됩니다. 논리를 뒤집어야 합니다.