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