我在Bash脚本中看到了两种不同的形式,它们似乎做着相同的事情:
`some command`
并且
$(some command)
这两者之间有什么区别?我应该在什么情况下使用它们各自?
语义上没有区别。反引号语法是较旧且功能较弱的版本。请参见bash手册中“命令替换”一节。
如果你的shell支持$()语法,建议使用它,因为它可以嵌套使用。
$()
\
foo\\
这样的表达式(与
不同)通常不会起作用,因为每个
pkg-config --cflags gtk+-3.0
pkg-config --libs gtk+-3.0
echo foo \
与
\
echo \foo\\
`` - Misha Moroshko\
echo `foo``这样的表达式(与
$(echo $(foo))不同)通常不会起作用,因为每个
``都可以是开头和结尾,存在歧义。可能由于幸运或特殊功能,它在某些特殊情况下能够工作。 - thitonpkg-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 Satensteinecho foo \
#comment`与
echo foo $(#comment)`。第二个不起作用。(用于在多行命令中进行注释。) - wisbucky