awk 单引号或双引号的用法

geo*_*hei 5 php awk

为什么 awk 命令使用单引号和双引号不能产生相同的结果?

root@vm90:/root# who | awk "{ print $2 }"
...
root@vm90:/root# who | awk '{ print $2 }'
...
Run Code Online (Sandbox Code Playgroud)

我想在 PHP shell_exec() 函数中使用 awk,该函数在整个代码中使用简单引号。

这 ...

$output = shell_exec("who | awk '{ print $2 }'");
Run Code Online (Sandbox Code Playgroud)

...有效,但我更喜欢...

$output = shell_exec('who | awk "{ print $2 }"');
Run Code Online (Sandbox Code Playgroud)

……这个,不行。

mrk*_*rks 4

来自GNU Awk 手册(添加了重点):

由于双引号文本中的某些字符由shell处理,因此必须在文本中对它们进行转义。值得注意的是字符$`\",如果要将它们逐字传递给程序,所有这些字符都必须在双引号文本中前面加上反斜杠。(首先删除前导反斜杠。)

  • 这就是为什么我总是在 `awk` 代码上使用单引号:`awk 'code'` (2认同)