我必须运行命令,在一个bash脚本中,并且在这个bash脚本中,我必须运行其他命令。我正在运行CentOS。bash for inline命令
我发现2种方法来做到这一点在博客和手册:使用使用美元符号的蜱或口音焦炭
command `sub command`
或
2)
1)和括号
command $(sub command)
2和哪一个更适合使用?
我必须运行命令,在一个bash脚本中,并且在这个bash脚本中,我必须运行其他命令。我正在运行CentOS。bash for inline命令
我发现2种方法来做到这一点在博客和手册:使用使用美元符号的蜱或口音焦炭
command `sub command`
或
2)
1)和括号
command $(sub command)
2和哪一个更适合使用?
有没有区别,除了在 “nestability”:
的$()
是嵌套:
$ echo $(echo "hi" $(echo "there"))
而``是不是。
$(...)
和反引号非常相似。两者之间的唯一区别是一些特殊字符被替换的细节;该手册介绍了比我更可以:
当使用替代旧式的反引号的形式,反斜杠其次当$,`,或者只是其字面含义。不带反斜杠的第一个反引号将终止命令替换。使用$(command)形式时,括号之间的所有字符构成命令;没有人专门处理。
例如,这使得嵌套$(...)
更容易一些。除此之外,没有什么区别。
从http://tldp.org/LDP/abs/html/commandsub.html报价:
希望这有助于!
其他人指出了语法上的区别(基本上,$()
在嵌套和逃逸方面略显清晰),但没有人提到我认为更重要的区别:$()
更容易阅读。它看起来不像单引号(这意味着完全不同),并且开始和结束分隔符不同,从而更容易在视觉上区分其内容。
对于您自己的脚本,这可能不是非常重要;代码可读性很好,但功能更重要。但对于任何编写教程,示例代码,stackoverflow答案等的人来说,可读性要重要得多。人们将键入单引号而不是反引号时,键入示例等,然后弄糊涂,当它不能按预期工作。
因此,对于每个人在stackoverflow上写的例子:请保存您的读者一些麻烦,并始终使用$()
表格。
我必须同意戈登的事实,$()是方式更清洁。我挣扎了2个小时编辑我的.bash_profile来添加自制bash完成只发现我应该使用`而不是'。
从技术上讲,它可以嵌套,但它必须在每个级别再次逃脱,并且因此不可维护*和*丑陋*。 – l0b0 2012-03-07 15:41:31