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