Bash
反引號中的嵌套 echo 命令
我想知道為什麼我的外殼會列印一個額外的迴聲。我正在使用
bash
版本 4.2.46(1)。echo `echo `echo $SHELL``
一個有趣的問題是,如果我用它替換
'``'
它$()
不會列印額外的迴聲:echo $(echo `echo $SHELL`)
我發現它以奇數
echo
命令號列印額外的迴聲:echo `echo `echo `echo `echo $SHELL````
你的兩個版本:
echo `echo `echo $SHELL``
和
echo $(echo `echo $SHELL`)
不等價。一旦看到另一個反引號,第一個反引號命令替換就會結束:
當使用舊式的反引號替換形式時,
$$ … $$前面沒有反斜杠的第一個反引號終止命令替換。
您的第一個版本實際上相當於:
echo $(echo )echo $SHELL$()
這就是為什麼您在輸出中得到“迴聲”的原因 - 您最終執行的命令(在替換後並刪除了額外的空格)只是:
echo echo /bin/bash
所以輸出是“echo /bin/bash”,就像你直接寫出那個命令一樣。
如果你必須嵌套反引號,你可以反斜杠內部對來逃避它們。您的第一個命令可以正確編寫為:
echo `echo \`echo $SHELL\``
雖然我不推薦它——它
$( ... )
是為嵌套而設計的。