2011-12-29 59 views
19

我必须运行命令,在一个bash脚本中,并且在这个bash脚本中,我必须运行其他命令。我正在运行CentOS。bash for inline命令

我发现2种方法来做到这一点在博客和手册:使用使用美元符号的蜱或口音焦炭

command `sub command` 

2)

1)和括号

command $(sub command) 

2和哪一个更适合使用?

回答

34

有没有区别,除了在 “nestability”:

$()是嵌套:

$ echo $(echo "hi" $(echo "there")) 

而``是不是。

+2

从技术上讲,它可以嵌套,但它必须在每个级别再次逃脱,并且因此不可维护*和*丑陋*。 – l0b0 2012-03-07 15:41:31

1

$(...)和反引号非常相似。两者之间的唯一区别是一些特殊字符被替换的细节;该手册介绍了比我更可以:

当使用替代旧式的反引号的形式,反斜杠其次当$,`,或者只是其字面含义。不带反斜杠的第一个反引号将终止命令替换。使用$(command)形式时,括号之间的所有字符构成命令;没有人专门处理。

例如,这使得嵌套$(...)更容易一些。除此之外,没有什么区别。

3

其他人指出了语法上的区别(基本上,$()在嵌套和逃逸方面略显清晰),但没有人提到我认为更重要的区别:$()更容易阅读。它看起来不像单引号(这意味着完全不同),并且开始和结束分隔符不同,从而更容易在视觉上区分其内容。

对于您自己的脚本,这可能不是非常重要;代码可读性很好,但功能更重要。但对于任何编写教程,示例代码,stackoverflow答案等的人来说,可读性要重要得多。人们键入单引号而不是反引号时,键入示例等,然后弄糊涂,当它不能按预期工作。

因此,对于每个人在stackoverflow上写的例子:请保存您的读者一些麻烦,并始终使用$()表格。

0

我必须同意戈登的事实,$()是方式更清洁。我挣扎了2个小时编辑我的.bash_profile来添加自制bash完成只发现我应该使用`而不是'。