有人可以解释Linux中``(back-quotes)和$()之间的区别吗? 非常感谢你!
到现在为止,我刚刚发现:
$echo `echo \\\\ `
\
$echo $(echo \\\\ )
\\
答案 0 :(得分:2)
它记录在man bash
:
当使用旧式反引号替换形式时,反斜杠保留其字面含义,除非后跟
$
,`
或\
。第一个不带反斜杠的反引号会终止命令替换。使用$(command)
表单时,全部 括号之间的字符组成命令;没有人受到特别对待。
更重要的区别在于它们如何嵌套:
echo $(echo $(echo a))
echo `echo `echo a`` # Wrong
echo `echo \`echo a\``
答案 1 :(得分:1)
后引号(``)和$()都可以用于命令替换,但它们之间存在细微差别。
以问题中提到的案例为例:
$echo `echo \\\\ `
第1和第3" \"将被视为转义,echo \\\\
将被评估为" \\"
因此,上述命令等于:
$echo \\
第一个反斜杠被视为转义,因此输出为:
\
在$()的情况下,有一点棘手,$()中的内容将作为参数传递给外部命令。
举个例子:
$echo $(echo \\\\ )
$()内部的内容被评估为" \\",这与前一种情况相同。与众不同的是" \\"将直接传递给外部echo命令,第一个反斜杠不会被视为转义。
因此我们得到了输出:
\\