Bash - echo`basename $ HOME`和echo $(basename $ HOME)之间的区别

时间:2013-01-18 13:45:50

标签: bash

非常感谢您提前帮助。

标题说明了一切:使用之间的区别是什么:

echo `basename $HOME` 

echo $(basename $HOME)

请注意我知道basename命令的作用,两种语法都有效,并且两个命令都提供相同的输出。

我只是想知道两者之间是否存在差异,如果有可能,为什么会有两种语法。

干杯

圣拉斐尔

3 个答案:

答案 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。