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

63

我在Bash脚本中看到了两种不同的形式,它们似乎做着相同的事情:

`some command`

并且

$(some command)

这两者之间有什么区别?我应该在什么情况下使用它们各自?

1个回答

59

语义上没有区别。反引号语法是较旧且功能较弱的版本。请参见bash手册中“命令替换”一节。

如果你的shell支持$()语法,建议使用它,因为它可以嵌套使用。


2
我看到反引号也可以嵌套。例如:\echo \foo\\`` - Misha Moroshko
12
像是\echo `foo``这样的表达式(与$(echo $(foo))不同)通常不会起作用,因为每个``都可以是开头和结尾,存在歧义。可能由于幸运或特殊功能,它在某些特殊情况下能够工作。 - thiton
7
有语义差异:反引号语法以不同且不明显的方式处理反斜杠。参见:http://mywiki.wooledge.org/BashFAQ/082 - benkc
1
我正在使用一个makefile。在这个makefile中,我有以下命令:gcc pkg-config --cflags gtk+-3.0 -o $@ $< pkg-config --libs gtk+-3.0如果我将反引号替换为bash函数调用: gcc $(pkg-config --cflags gtk+-3.0) -o $@ $< $(pkg-config --libs gtk+-3.0)那么makefile会失败。因此,通过make工具,存在差异。 命令行执行不会失败。 - Leslie Satenstein
2
另一个区别是:echo foo \#comment`echo foo $(#comment)`。第二个不起作用。(用于在多行命令中进行注释。) - wisbucky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接