我必须在bash脚本中运行命令,并且在这个bash脚本中我必须运行其他命令。我正在运行CentOS。
我在博客和手册上找到了两种方法:
1)使用ticks或accent char
command `sub command`
或
2)使用美元符号和括号
command $(sub command)
2和哪一个最好使用之间有什么区别?
答案 0 :(得分:37)
除了“可嵌套性”之外没有区别:
$()
可嵌套:
$ echo $(echo "hi" $(echo "there"))
而``不是。
答案 1 :(得分:5)
其他人已经指出了语法的差异(基本上,$()
稍微更清楚了嵌套和转义),但是没有人提到我认为更重要的区别:$()
更容易阅读。它看起来不像单引号(这意味着完全不同的东西),并且开始和结束分隔符是不同的,使其更容易在视觉上区分其内容。
对于您自己的脚本,这可能不是很重要;代码可读性很好,但功能更重要。但对于任何编写教程,示例代码,堆栈溢出答案等的人来说,可读性更为重要。在输入示例等时,人们将键入单引号而不是反引号,然后当它无法按预期工作时会感到困惑。
因此,对于每个人在stackoverflow上编写示例:请为您的读者省去一些麻烦,并始终使用$()
表单。
答案 2 :(得分:2)
$(...)
和反引号非常相似。两者之间的唯一区别是一些特殊字符被替换的细节;手册解释得比我更好:
当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后跟$,`或者。第一个不带反斜杠的反引号会终止命令替换。使用$(命令)表单时,括号之间的所有字符组成命令;没有人受到特别对待。
这使得嵌套$(...)
更容易一些。除此之外,没有区别。
答案 3 :(得分:1)
引自http://tldp.org/LDP/abs/html/commandsub.html:
希望这有帮助!
答案 4 :(得分:0)
我必须同意Gordon,因为$()更清洁。我挣扎了2个小时编辑我的.bash_profile添加自制bash完成只是为了发现我应该一直使用`而不是'。