bash脚本中的反引号和$()有什么区别?

Mis*_*hko 55 bash backticks

我在bash脚本中看到两种不同的形式,它们似乎也是一样的:

`some command`
Run Code Online (Sandbox Code Playgroud)

$(some command)
Run Code Online (Sandbox Code Playgroud)

这两者有什么区别,什么时候应该使用它们?

thi*_*ton 52

没有语义差异.反引号语法是较旧且功能较弱的版本.参见man bash"命令替换"部分.

如果你的shell支持$()语法,那就喜欢它,因为它可以嵌套.

  • @MishaMoroshko:像`\`echo \`foo \`\`(而不是`$(echo $(foo))`这样的表达式一般不会起作用,因为固有的歧义因为每个`\``都可以开放或关闭.由于运气或特殊功能,它可能适用于特殊情况. (11认同)
  • _是一个语义差异:反引号语法以不同且非显而易见的方式处理反斜杠.请参阅:http://mywiki.wooledge.org/BashFAQ/082 (4认同)
  • 我发现反引号也可以嵌套。例如: `\`echo \\`foo\\`\`` (2认同)
  • 另一个区别是:`echo foo \`#comment\`` 与 `echo foo $(#comment)`。第二个不行。(用于在多行命令中进行注释。) (2认同)