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

Kar*_*våg 10 syntax bash

问题很简单,如标题所述:以下两个表达式之间的区别是什么?

$(...)
`...`
Run Code Online (Sandbox Code Playgroud)

例如,有两个变量test1test2不同?

test1=$(ls)
test2=`ls`
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 9

结果是一样的,但更新的$()语法更清晰,更容易阅读.当试图筑巢时至少加倍.使用旧语法嵌套并不容易,但使用新方法可以正常工作.

相比:

$ echo $(ls $(pwd))
Run Code Online (Sandbox Code Playgroud)

与:

$ echo `ls \`pwd\``
Run Code Online (Sandbox Code Playgroud)

你需要逃避嵌入的反引号,所以它的类型和读取都要复杂得多.

根据这个页面,它们如何处理嵌入式双反斜杠至少有一个细微差别.

  • 使用反引号语法可以实现嵌套*,它只需要大量的反斜杠,并且很快变得几乎不可读.特别是如果你混合其他类型的报价. (2认同)

ELL*_*BLE 5

你可能想读man bash:

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

这是在联机帮助页的"命令替换"部分下.


Kel*_*tia 5

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