awk의 system() 호출이 왜 이렇게 작동합니까?

awk의 system() 호출이 왜 이렇게 작동합니까?

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

삭제하면 -qgrep이 해당 항목을 찾은 것을 볼 수 있으므로 bar0으로 종료되어야 하므로 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은 성공을 나타내지만 awkFALSE로 해석됩니다. 논리를 뒤집어야 합니다.

관련 정보