非常感谢您提前帮助。
标题说明了一切:使用之间的区别是什么:
echo `basename $HOME`
和
echo $(basename $HOME)
请注意我知道basename命令的作用,两种语法都有效,并且两个命令都提供相同的输出。
我只是想知道两者之间是否存在差异,如果有可能,为什么会有两种语法。
干杯
圣拉斐尔
答案 0 :(得分:6)
第二种形式具有不同的转义规则,使其更容易嵌套。 e.g。
echo $(echo $(basename $HOME))
我将继续研究如何用“作为读者的练习”,这应该证明具有启发性。
答案 1 :(得分:3)
他们是同一个人 请阅读this。
编辑(来自链接):
命令替换
命令替换允许输出命令来替换命令本身。当命令被包含在这样的命令时发生命令替换:
$(command)
或像这样使用反引号:
`command`
Bash
执行扩展,执行 COMMAND 并将命令替换替换为命令的标准输出,并删除任何尾随换行符。嵌入的换行不会被删除,但在分词时可能会被删除。
$ franky ~> echo `date`
Thu Feb 6 10:06:20 CET 2003
当使用旧式反引号替换形式时,反斜杠保留其字面含义,除非后跟“$”,“`”或“\”。第一个没有反斜杠的反引号会终止命令替换。使用$(COMMAND)
表单时,括号内的所有字符组成命令;没有人特别对待。
命令替换可以嵌套。要在使用反引号形式时进行嵌套,请使用反斜杠转义内部反引号。
如果替换出现在双引号内,则不会对结果执行分词和文件名扩展。
答案 2 :(得分:1)
它们是命令替换的替代语法。正如@Steve所提到的那样,他们有不同的引用规则,并且反引号更难以嵌套。另一方面,它们更易于使用旧版本的bash和其他shell,例如csh。