なぜエコ<

なぜエコ<

これがなぜ機能するのかを説明できる人がいるかどうか疑問に思います。

echo `cat <<EOF
  {"branch":"foo","value":"bar"}
EOF`

しかし、そうではありません:

echo <<EOF
  {"branch":"foo","value":"bar"}
EOF

(2番目のフラグメントは標準出力には何も表示しません。)

ベストアンサー1

echoはstdInから読まないからです。この試み:

echo foo bar | echo

ただし、catは引数にファイルがない場合にのみこれを行います。

echo foo bar | cat

最初の例は、結果を...echoの引数として挿入することです。 2番目の例は、エコーにHEREDOCを提供するので無視されます。

また、最初の例はechoの引数を保護しません。これはシェルがそれをechoに渡した後に再び拡張することを意味します。

有害な文字を動作しないバンとして扱います。

echo `cat <<EOF
  {"branch":"foo","value":"bar!"}
EOF`

これは次のことを行います。

echo "`cat <<EOF
  {"branch":"foo","value":"bar!"}
EOF`"

おすすめ記事