首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash - echo `basename $HOME`和echo $(basename $HOME)之间的差异

Bash - echo `basename $HOME`和echo $(basename $HOME)之间的差异
EN

Stack Overflow用户
提问于 2013-01-18 21:45:50
回答 3查看 5.6K关注 0票数 6

非常感谢您的帮助。

标题说明了一切:使用以下命令有什么区别:

代码语言:javascript
复制
echo `basename $HOME` 

代码语言:javascript
复制
echo $(basename $HOME)

请注意,我知道basename命令是做什么的,这两个语法都是有效的,并且两个命令都给出了相同的输出。

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

干杯

拉斐尔

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-18 21:48:26

第二种形式有不同的转义规则,这使得它更容易嵌套。例如:

代码语言:javascript
复制
echo $(echo $(basename $HOME))

我将把如何做到这一点留给读者作为练习,它应该被证明是有启发性的。

票数 7
EN

Stack Overflow用户

发布于 2013-01-18 21:48:38

它们是相同的一种。

请阅读this

编辑(从链接):

命令替换

命令替换允许命令的输出替换命令本身。命令替换发生在将命令括起来时,如下所示:

代码语言:javascript
复制
$(command)

或者像这样使用反引号:

代码语言:javascript
复制
`command`

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

代码语言:javascript
复制
$ 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$(命令)“形式,括号之间的所有字符组成命令;没有特殊处理。

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

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

票数 4
EN

Stack Overflow用户

发布于 2013-01-18 21:55:56

它们是命令替换的替代语法。正如@Steve提到的那样,他们有不同的引用规则,因此很难嵌套反引号。另一方面,它们与旧版本的bash和其他shell(如csh )的可移植性更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14400264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档