非常感谢您的帮助。
标题说明了一切:使用以下命令有什么区别:
echo `basename $HOME` 和
echo $(basename $HOME)请注意,我知道basename命令是做什么的,这两个语法都是有效的,并且两个命令都给出了相同的输出。
我只是想知道两者之间是否有任何区别,如果可能的话,为什么会有两种语法。
干杯
拉斐尔
发布于 2013-01-18 21:48:26
第二种形式有不同的转义规则,这使得它更容易嵌套。例如:
echo $(echo $(basename $HOME))我将把如何做到这一点留给读者作为练习,它应该被证明是有启发性的。
发布于 2013-01-18 21:48:38
它们是相同的一种。
请阅读this。
编辑(从链接):
命令替换
命令替换允许命令的输出替换命令本身。命令替换发生在将命令括起来时,如下所示:
$(command)或者像这样使用反引号:
`command`Bash通过执行命令并将命令替换为命令的标准输出来执行扩展,并删除任何尾随的换行符。嵌入的换行符不会被删除,但在拆分单词的过程中可能会被删除。
$ franky ~> echo `date`
Thu Feb 6 10:06:20 CET 2003当使用老式的反引号形式的替换时,反斜杠保持其字面意义,除非后面跟"$“、”", or "\". The first backticks not preceded by a backslash terminates the command substitution. When using the$(命令)“形式,括号之间的所有字符组成命令;没有特殊处理。
命令替换可以是嵌套的。要在使用反引号形式时进行嵌套,请使用反斜杠转义内部的反引号。
如果替换出现在双引号内,则不会对结果执行分词和文件名扩展。
发布于 2013-01-18 21:55:56
它们是命令替换的替代语法。正如@Steve提到的那样,他们有不同的引用规则,因此很难嵌套反引号。另一方面,它们与旧版本的bash和其他shell(如csh )的可移植性更好。
https://stackoverflow.com/questions/14400264
复制相似问题