2015-12-08 83 views
0

任何人都可以解釋Linux中`(反引號)和$()之間的區別嗎? 非常感謝!

到現在爲止,我只是發現:

$echo `echo \\\\ ` 
\ 
$echo $(echo \\\\) 
\\ 

回答

1

它記錄在man bash

當使用替代舊式的反引號的形式,反斜槓其次,當除了它的字面意思通過$,`\。不帶反斜槓的第一個反引號將終止命令替換。當使用$(command)表格時,圓括號之間的所有 字符構成命令;沒有人專門處理。

更重要的區別是它們如何巢:

echo $(echo $(echo a)) 
echo `echo `echo a`` # Wrong 
echo `echo \`echo a\`` 
+0

報價,但沒有源...快速谷歌搜索建議的來源是Bash的參考手冊,但問題不是猛砸特定的。在此引用Shell命令語言規範的這一部分(http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03)會更合適。 – Jubobs

0

反引號(``)和$()都可以使用命令替換,但他們有微小的差別。

取問題提及作爲實例的情況下:

$echo `echo \\\\ ` 

的第一和第三「\」將被視爲逃逸,echo \\\\將被評價爲「\\」

因此,上述命令是等於爲:

$echo \\ 

而第一反斜槓被當作逃逸,所以輸出是:

\ 

在$()的情況下,有一點棘手,在$()內部評估的內容將作爲參數傳遞給外部命令。

作爲一個例子:

$echo $(echo \\\\) 

什麼是$()內被評價爲「\\」,這是相同的前面的情況。不同之處在於「\\」將直接傳遞給外部回顯命令,第一個反斜槓不會被當作轉義處理。

因此,我們會得到輸出:

\\ 
相關問題