我正在尝试使用 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 并因此打印是,否?
$ 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
在 shell 中,退出代码 0 代表命令成功,任何其他都代表失败(及其原因)。这就是
system
返回:0 表示成功,但awk
将其解释为 FALSE。你需要颠倒逻辑。