Bash
迴聲、管道和命令替換
我想用(管道)替換一個
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
目的。有關的: