2009-01-19 188 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

相关问题