【发布时间】:2016-03-13 01:59:15
【问题描述】:
谁能解释Linux中``(反引号)和$()之间的区别? 非常感谢!
到现在,我才发现:
$echo `echo \\\\ `
\
$echo $(echo \\\\ )
\\
【问题讨论】:
谁能解释Linux中``(反引号)和$()之间的区别? 非常感谢!
到现在,我才发现:
$echo `echo \\\\ `
\
$echo $(echo \\\\ )
\\
【问题讨论】:
记录在man bash:
当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后面跟着
$、`或\。前面没有反斜杠的第一个反引号终止命令替换。使用$(command)表单时,所有 括号之间的字符组成命令;没有人受到特殊对待。
更重要的区别在于它们的嵌套方式:
echo $(echo $(echo a))
echo `echo `echo a`` # Wrong
echo `echo \`echo a\``
【讨论】:
反引号(``) 和 $() 都可以用于命令替换,但它们有细微的区别。
以问题中提到的案例为例:
$echo `echo \\\\ `
第一个和第三个“\”将被视为转义,echo \\\\ 将被评估为“\\”
因此,上面的命令等于:
$echo \\
并且第一个反斜杠被视为转义,所以输出为:
\
在 $() 的情况下,有一点小技巧,在 $() 内部计算的内容将作为参数传递到外部命令。
举个例子:
$echo $(echo \\\\ )
$() 中的内容被评估为“\\”,这与前面的情况相同。不同的是,“\\”会直接传递给外部的echo命令,第一个反斜杠不会被当成转义符。
因此我们会得到输出:
\\
【讨论】: