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

jes*_*e_b 5 awk gawk

我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)

如果我删除-q我可以看到 grep 确实找到了bar所以它应该退出 0 并因此打印是,否?

$ awk 'BEGIN{ if ( system( "grep bar foo.txt" ) ) { print "yes" } else { print "no" } }'
bar
no
Run Code Online (Sandbox Code Playgroud)

grep从等式中完全去除:

$ awk 'BEGIN{ if ( system( "true" ) ) { print "yes" } else { print "no" } }'
no
Run Code Online (Sandbox Code Playgroud)

Rud*_*diC 12

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

  • 嗯,谢谢! (3认同)