问题与标题中所述的一样简单:以下两个表达式之间的区别是什么?
$(...)
`...`
例如,两个变量test1
和test2
是否不同?
test1=$(ls)
test2=`ls`
答案 0 :(得分:9)
结果相同,但较新的$()语法更清晰,更易于阅读。当试图筑巢时至少加倍。使用旧语法嵌套并不容易,但使用新的。
可以正常工作比较
$ echo $(ls $(pwd))
与
$ echo `ls \`pwd\``
你需要逃避嵌入式反引号,所以输入和读取都要复杂得多。
根据this page,他们对嵌入式双反斜杠的处理方式至少有一点不同。
答案 1 :(得分:5)
您可能需要阅读man bash
:
当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后跟$,`或者。第一个不带反斜杠的反引号会终止命令替换。使用$(命令)表单时,括号之间的所有字符组成命令;没有人受到特别对待。
这是在联机帮助页的“命令替换”部分下。
答案 2 :(得分:5)
使用```是历史语法,POSIX采用了现在标准的`$(...)语法。见Section 2.6.3