awk 打印在 bash -c 中不起作用

awk 打印在 bash -c 中不起作用

我注意到这工作正常(只会打印unattended-upgrades进程的 PID):

lslocks | awk '/unattended-upgrades/ { print $2 }'

但这实际上忽略了该print部分(将打印整行):

bash -c "lslocks | awk '/unattended-upgrades/ { print $2 }'"

这是 Ubuntu 18.04 和 Bash 版本 4.4.20。

造成这种情况的空间是什么bash -c

答案1

这里没有什么特别的bash -c- 事实上外部双引号允许$2交互式 shell 的扩展:

$ set -x
$ bash -c "echo foo bar | awk '{ print $2 }'"
+ bash -c 'echo foo bar | awk '\''{ print  }'\'''
foo bar

(这里的“问题”是单引号在双引号内并不特殊;外部双引号“保留其字面值”。请参阅Bash 参考手册 3.1.2.3 双引号.)

比较:

$ bash -c "echo foo bar | awk '{ print \$2 }'"
+ bash -c 'echo foo bar | awk '\''{ print $2 }'\'''
bar

相关内容