我正在尝试使用 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。你需要颠倒逻辑。