awk:接続文字列がコマンド文字列に渡されると、列は印刷されません。

awk:接続文字列がコマンド文字列に渡されると、列は印刷されません。

スクリプトを書いている間、いくつかの奇妙なことが見つかりました。

次の例は期待どおりに機能します。

$ echo 123 | awk '{print $1 456}'
123456
$ sh -c "echo 123 | awk '{print $1}'"
123

ただし、次の例ではそうではありません。

$ sh -c "echo 123 | awk '{print $1 456}'"
456

最初の列には、追加された文字列が印刷されると予想されます。この文字列は、123456.txtなしで同じコマンドを実行したときと同じように返す必要がありますsh -c。しかし、何らかの理由で最初の列は無視されています。興味深いことに、$1文字列接続を行わなくても印刷に問題はありません。

これが発生するのはなぜですか。別のシェルインスタンスに渡されたコマンドで文字列接続をどのように実行しますか?

ベストアンサー1

$フラグをエスケープする必要があります。

$ sh -c "echo 123 | awk '{print \$1 456}'"
123456

それ以外の場合は、$1現在のシェルに展開します。

おすすめ記事