私はこれがうまくいくことを知っていました(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
対話型シェルを拡張できます。
$ 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