6

非常感谢您的帮助。

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

echo `basename $HOME` 

echo $(basename $HOME)

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

我只是想知道两者之间是否有任何区别,如果可能的话,为什么有两种语法。

干杯

拉斐尔

4

3 回答 3

7

第二种形式具有不同的转义规则,使其更容易嵌套。例如

echo $(echo $(basename $HOME))

我将把如何用 ` 做为读者的练习,它应该证明是有启发性的。

于 2013-01-18T13:48:25.807 回答
4

它们是相同的之一。
请阅读内容。

编辑(来自链接):
命令替换

命令替换允许命令的输出替换命令本身。当像这样包含命令时会发生命令替换:

$(command)

或者像这样使用反引号:

`command`

Bash通过执行COMMAND并用命令的标准输出替换命令替换来执行扩展,并删除任何尾随换行符。嵌入的换行符不会被删除,但它们可能会在分词过程中被删除。

$ franky ~> echo `date`
Thu Feb 6 10:06:20 CET 2003

当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后面跟“$”、“`”或“\”。前面没有反斜杠的第一个反引号终止命令替换。使用$(COMMAND)表格时,括号之间的所有字符组成命令;没有人受到特殊对待。

命令替换可能是嵌套的。要在使用反引号形式时嵌套,请使用反斜杠转义内部反引号。

如果替换出现在双引号中,则不会对结果执行分词和文件名扩展。

于 2013-01-18T13:48:37.537 回答
1

它们是命令替换的替代语法。正如@Steve 提到的,他们有不同的引用规则,而且反引号更难嵌套。另一方面,它们更便于使用旧版本的 bash 和其他 shell,例如 csh。

于 2013-01-18T13:55:56.200 回答