我注意到这工作正常(只会打印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