エコ、パイプ、コマンドの置き換え

エコ、パイプ、コマンドの置き換え

echoコマンドを(パイプ)に置き換えたいです|。例えば、

$(echo "echo 'hello' | cat")

返品

'hello' | cat

私はこれが次のように振る舞うことを願っています。

echo 'hello' | cat

返品

hello

しかしそれは真実ではない。なぜ?

PS。私も知っていeval

eval $(echo "echo 'hello' | cat")

期待どおりに動作

ベストアンサー1

|&&(or、orなど)などの構文要素は、;コマンドラインで最初に解析されることが認識され、引数/変数拡張後には再処理されません。

パラメータ拡張、コマンド置換、および算術拡張の後に発生するほとんど唯一のことは、単語の分離とファイル名のグロービングです。拡張出力も再拡張されません。これは印刷されません6

$ var='$((1+2+3))'         # $((..)) not expanded here (single-quotes)
$ echo $var                # $((..)) not expanded here either
$((1+2+3))

再解析して拡張することが、私たちがevalここにいる理由です。

関連:

おすすめ記事