$(...)和`...`之间有什么区别

时间:2009-01-19 10:10:21

标签: bash syntax

问题与标题中所述的一样简单:以下两个表达式之间的区别是什么?

$(...)
`...`

例如,两个变量test1test2是否不同?

test1=$(ls)
test2=`ls`

3 个答案:

答案 0 :(得分:9)

结果相同,但较新的$()语法更清晰,更易于阅读。当试图筑巢时至少加倍。使用旧语法嵌套并不容易,但使用新的。

可以正常工作

比较

$ echo $(ls $(pwd))

$ echo `ls \`pwd\``

你需要逃避嵌入式反引号,所以输入和读取都要复杂得多。

根据this page,他们对嵌入式双反斜杠的处理方式至少有一点不同。

答案 1 :(得分:5)

您可能需要阅读man bash

  

当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后跟$,`或者。第一个不带反斜杠的反引号会终止命令替换。使用$(命令)表单时,括号之间的所有字符组成命令;没有人受到特别对待。

这是在联机帮助页的“命令替换”部分下。

答案 2 :(得分:5)

使用```是历史语法,POSIX采用了现在标准的`$(...)语法。见Section 2.6.3