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 と解釈されます。論理を裏返す必要があります。

おすすめ記事