Bash

迴聲、管道和命令替換

  • March 17, 2019

我想用(管道)替換一個echo命令。|例如,

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

返回

'hello' | cat

我希望這表現得像

echo 'hello' | cat

返回

hello

但事實並非如此。為什麼?

PS。我知道eval,並且

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

按預期工作

|因為像(or &&, or etc) 這樣的語法元素;被辨識為命令行解析的第一件事,在參數/變數展開後不再處理。

在參數擴展、命令替換和算術擴展之後發生的幾乎唯一的事情是分詞和文件名萬用字元。擴展的輸出也不會再次擴展:這不會列印6

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

再進行一次解析和擴展正是eval目的。

有關的:

引用自:https://unix.stackexchange.com/questions/506854