为什么 awk 的 system() 调用会这样?

为什么 awk 的 system() 调用会这样?

我正在尝试使用 system() 在 awk 内执行 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

在 shell 中,退出代码 0 代表命令成功,任何其他退出代码代表失败(及其原因)。这就是system返回:0 表示成功,但awk将其解释为 FALSE。你需要颠倒逻辑。

相关内容