Linux 为什么命令替换的反引号和$()会导致不同的输出?

Linux 为什么命令替换的反引号和$()会导致不同的输出?,linux,shell,Linux,Shell,有人能解释一下Linux中“`”(反引号)和$()之间的区别吗? 多谢各位 到目前为止,我刚刚发现: $echo `echo \\\\ ` \ $echo $(echo \\\\ ) \\ 它记录在manbash中: 当使用旧式的反引号替换形式时,反斜杠保留其字面含义,除非后跟$、`或 \。第一个不带反斜杠的反引号终止命令替换。使用$(命令)表单时,所有 括号之间的字符组成命令;没有人受到特殊对待 更重要的区别在于它们的嵌套方式: echo $(echo $(echo a)) echo `ec

有人能解释一下Linux中“`”(反引号)和$()之间的区别吗? 多谢各位

到目前为止,我刚刚发现:

$echo `echo \\\\ `
\
$echo $(echo \\\\ )
\\

它记录在
manbash
中:

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

更重要的区别在于它们的嵌套方式:

echo $(echo $(echo a))
echo `echo `echo a``   # Wrong
echo `echo \`echo a\``

它记录在
manbash
中:

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

更重要的区别在于它们的嵌套方式:

echo $(echo $(echo a))
echo `echo `echo a``   # Wrong
echo `echo \`echo a\``
反引号(``)和$()都可以用于命令替换,但它们的区别很小

以问题中提到的案例为例:

$echo `echo \\\\ `
第一个和第三个“\”将被视为转义,
echo\\\\\
将被评估为“\\”

因此,上述命令等于:

$echo \\
第一个反斜杠被视为转义,因此输出为:

\
在$()的情况下,有一点棘手,在$()中计算的内容将作为参数传递给外部命令

例如:

$echo $(echo \\\\ )
$()中的内容计算为“\\”,这与前面的情况相同。不同的是“\\”将直接传递给外部echo命令,第一个反斜杠不会被视为转义

因此,我们将得到输出:

\\
反引号(``)和$()都可以用于命令替换,但它们的区别很小

以问题中提到的案例为例:

$echo `echo \\\\ `
第一个和第三个“\”将被视为转义,
echo\\\\\
将被评估为“\\”

因此,上述命令等于:

$echo \\
第一个反斜杠被视为转义,因此输出为:

\
在$()的情况下,有一点棘手,在$()中计算的内容将作为参数传递给外部命令

例如:

$echo $(echo \\\\ )
$()中的内容计算为“\\”,这与前面的情况相同。不同的是“\\”将直接传递给外部echo命令,第一个反斜杠不会被视为转义

因此,我们将得到输出:

\\

引用,但没有来源。。。快速的谷歌搜索表明源代码是Bash参考手册,但问题不是Bash特有的。在这里引用这个Shell命令语言规范更合适。一个引号,但没有源代码。。。快速的谷歌搜索表明源代码是Bash参考手册,但问题不是Bash特有的。在这里引用Shell命令语言规范中的这一点更合适。