bash用于内联命令

时间:2011-12-29 03:07:16

标签: bash command

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

我在博客和手册上找到了两种方法:

1)使用ticks或accent char

command `sub command`

2)使用美元符号和括号

command $(sub command)

2和哪一个最好使用之间有什么区别?

5 个答案:

答案 0 :(得分:37)

除了“可嵌套性”之外没有区别:

$()可嵌套:

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

而``不是。

答案 1 :(得分:5)

其他人已经指出了语法的差异(基本上,$()稍微更清楚了嵌套和转义),但是没有人提到我认为更重要的区别:$()更容易阅读。它看起来不像单引号(这意味着完全不同的东西),并且开始和结束分隔符是不同的,使其更容易在视觉上区分其内容。

对于您自己的脚本,这可能不是很重要;代码可读性很好,但功能更重要。但对于任何编写教程,示例代码,堆栈溢出答案等的人来说,可读性更为重要。在输入示例等时,人们键入单引号而不是反引号,然后当它无法按预期工作时会感到困惑。

因此,对于每个人在stackoverflow上编写示例:请为您的读者省去一些麻烦,并始终使用$()表单。

答案 2 :(得分:2)

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

  

当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后跟$,`或者。第一个不带反斜杠的反引号会终止命令替换。使用$(命令)表单时,括号之间的所有字符组成命令;没有人受到特别对待。

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

答案 3 :(得分:1)

引自http://tldp.org/LDP/abs/html/commandsub.html

  1. $(...)形式的命令替换以不同于`...`的方式处理双反斜杠。
  2. $(...)形式的命令替换允许嵌套
  3. 希望这有帮助!

答案 4 :(得分:0)

我必须同意Gordon,因为$()更清洁。我挣扎了2个小时编辑我的.bash_profile添加自制bash完成只是为了发现我应该一直使用`而不是'。