bash用于内联命令

dal*_*ale 24 bash command

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

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

1)使用ticks或accent char

command `sub command`
Run Code Online (Sandbox Code Playgroud)

要么

2)使用美元符号和括号

command $(sub command)
Run Code Online (Sandbox Code Playgroud)

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

hol*_*eek 40

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

$()是嵌套:

$ echo $(echo "hi" $(echo "there"))
Run Code Online (Sandbox Code Playgroud)

而``不是.

  • 从技术上讲,它可以嵌套,但必须为每个级别再次转义,因此*不可维护*和*丑陋*. (3认同)

小智 5

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

当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后面跟着 $、` 或 。前面没有反斜杠的第一个反引号终止命令替换。当使用$(command)形式时,括号内的所有字符组成命令;没有一个受到特殊对待。

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


Gor*_*son 5

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

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

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