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対話型シェルを拡張できます。

$ 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

関連情報