2009-01-19 192 views
10

問題與標題所述的一樣簡單:以下兩個表達式有什麼區別?

$(...) 
`...` 

例如,是兩個變量test1test2不同?

test1=$(ls) 
test2=`ls` 
+0

@theman:謝謝你的「有見識」的評論。 – 2009-02-25 11:37:08

+0

請注意,這不只是bash。這適用於ksh和普通的舊sh(即使在sh中也不是變相的bash)。 – dwc 2009-02-26 22:09:05

回答

9

結果是一樣的,但新的$()語法更加清晰易讀。當試圖築巢時,至少是雙重的。使用舊的語法嵌套不容易,但對於新的嵌套很好。

比較:

$ echo $(ls $(pwd)) 

與:

$ echo `ls \`pwd\`` 

你需要躲避嵌入式反引號,所以這是一個相當複雜多了這兩個類型和讀取。

根據this page,他們對待嵌入的雙反斜槓的方式至少有一點區別。

+2

嵌套*可能使用反引號語法,它只需要大量反斜槓,並且很快變得幾乎不可讀。特別是如果你混合使用其他類型的報價。 – hobbs 2016-05-01 07:57:01

5

您可能需要閱讀man bash

當使用替代舊式的反引號的形式,反斜槓其次當$,`,或者只是其字面含義。不帶反斜槓的第一個反引號將終止命令替換。使用$(command)形式時,括號之間的所有字符構成命令;沒有人專門處理。

這是在手冊頁的「命令替換」部分。

5

使用```是歷史語法,POSIX採用了現在標準的$(...)語法。見Section 2.6.3

相關問題