bash 用于内联命令

问题描述 投票:0回答:4

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

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

1) 使用刻度或重音字符

command `sub command`

2) 使用美元符号和括号

command $(sub command)

这 2 种有什么区别,哪一种更适合使用?

bash command
4个回答
61
投票

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

$()
是可嵌套的:

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

而``则不是。


7
投票

其他人指出了语法上的差异(基本上,

$()
对于嵌套和转义来说稍微干净一些),但没有人提到我认为更重要的区别:
$()
更容易阅读。它看起来不像单引号(意味着完全不同的东西),并且开始和结束分隔符不同,使得更容易在视觉上区分其内容。

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

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

$()
形式。


5
投票

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

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

例如,这使得嵌套更容易

$(...)
。但除此之外,没有什么区别。


2
投票

来自 https://tldp.org/LDP/abs/html/commandsub.html

命令替换的 $(...) 形式处理双反斜杠的方式与 `...`.

命令替换的 $(...) 形式允许嵌套。

© www.soinside.com 2019 - 2024. All rights reserved.