任何人都可以解釋Linux中`(反引號)和$()之間的區別嗎? 非常感謝!
到現在爲止,我只是發現:
$echo `echo \\\\ `
\
$echo $(echo \\\\)
\\
任何人都可以解釋Linux中`(反引號)和$()之間的區別嗎? 非常感謝!
到現在爲止,我只是發現:
$echo `echo \\\\ `
\
$echo $(echo \\\\)
\\
它記錄在man bash
:
當使用替代舊式的反引號的形式,反斜槓其次,當除了它的字面意思通過
$
,`
或\
。不帶反斜槓的第一個反引號將終止命令替換。當使用$(command)
表格時,圓括號之間的所有 字符構成命令;沒有人專門處理。
更重要的區別是它們如何巢:
echo $(echo $(echo a))
echo `echo `echo a`` # Wrong
echo `echo \`echo a\``
反引號(``)和$()都可以使用命令替換,但他們有微小的差別。
取問題提及作爲實例的情況下:
$echo `echo \\\\ `
的第一和第三「\」將被視爲逃逸,echo \\\\
將被評價爲「\\」
因此,上述命令是等於爲:
$echo \\
而第一反斜槓被當作逃逸,所以輸出是:
\
在$()的情況下,有一點棘手,在$()內部評估的內容將作爲參數傳遞給外部命令。
作爲一個例子:
$echo $(echo \\\\)
什麼是$()內被評價爲「\\」,這是相同的前面的情況。不同之處在於「\\」將直接傳遞給外部回顯命令,第一個反斜槓不會被當作轉義處理。
因此,我們會得到輸出:
\\
報價,但沒有源...快速谷歌搜索建議的來源是Bash的參考手冊,但問題不是猛砸特定的。在此引用Shell命令語言規範的這一部分(http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03)會更合適。 – Jubobs