Bash
$() 和 `` 的不同行為
% PATH="MYPATH" % VAR="PATH" % echo $(eval echo \$$VAR) MYPATH % echo `eval echo \$$VAR` 5707VAR ^^ This is the process number.
我認為這兩個完全一樣,但顯然有一些差異,比如逃避行為。有什麼區別?
我將轉載 BASH 參考手冊的文字,因為我不會更好地表達它:
Bash 通過執行命令並將命令替換替換為命令的標準輸出來執行擴展,並刪除任何尾隨的換行符。嵌入的換行符不會被刪除,但它們可能會在分詞過程中被刪除。命令替換 $ (cat file) can be replaced by the equivalent but faster $ (<文件)。
當使用舊式反引號形式的替換時,反斜杠保留其字面意思,除非後面跟著 ’ $ ’, ‘`’, or ‘\’. The first backquote not preceded by a backslash terminates the command substitution. When using the $ (command) 形式,括號之間的所有字元組成命令;沒有人受到特殊對待。
資料來源:Bash 參考手冊,命令替換