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
ここにいる理由です。
関連: