Linuxecho的输出

这是一个非常有趣的问题,但很难真正解释清楚。
让我用一个更简单的例子更清楚地解释这一点。

例如,您有一个名为test.sh的shell脚本,其中包含以下两行:

echo`echo\$HOSTNAME`//反引号echo$(echo\$HOSTNAME)//$()

sh-xtest.sh来分析bash如何解释该脚本。
返回的信息是:

从上图中可以得出两个结论:

数字中的反引号\$转换了$的特殊含义,我没有。
反引号echo\$hostname中包含的任何内容仍被解释为echo$HOSTNAME,并且检索并打印该变量的值。
反引号是CentOS-1。

$()则相反,$显然是\转义为普通字符,所以无法获取变量的值,但它返回的是字符串本身的含义,所以$HOSTNAME<返回/p>


这表明反引号会影响反斜杠(\)。
)特殊转换。
至少如果你直接使用\,你会发现它并没有起到转义自身的作用。
接下来,对脚本的内容进行一些更改。

echo`echo\\$HOSTNAME`//反引号echo$(echo\\$hostname)//$()

back已添加另一个斜杠。
现在看一下输出:

现在它应该看起来像反转的:

反引号被文字$HOSTNAME替换

$()按预期获得了变量值并正确打印了转义字符串\

我做了另一个实验,a.sh。
让我们创建一个脚本名称:

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

注意:有最后一个反引号和)之前有一个空格。
否则,最后一个反引号和)将被注释掉。
不被视为结尾的符号。

这是使用sh-xa.sh的结果:

从上图我们可以看到:

\in4反引号打印为1\

4\\在$()中打印为2\

脚本8改为\:

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

让我们再看看输出:

所以

反引号Qi本身转义了\和保留含义。
如果希望反引号具有\的特殊含义,则必须使用2\来表示。

因此,使用反引号,您可以简单地想象:\\=\

$()不必考虑\问题,它与您通常使用的相同。
\=\

旁注:反引号是一种古老的用法,但建议在学习测试和实际工作中使用$()。

【松勤教育】linux命令-引用符号(反斜杠\、单引号''、双引号"")

Linux具有三种形式的引号:反斜杠(\)、单引号(''')和双引号('''),每种形式在命令行解析中都有自己的用途。
反斜杠可用作转义字符,单引号可用于硬转义(不改变字符输出),双引号可用于软转义(允许变量扩展)。
单引号保护双引号,双引号保护单引号。
例如,对于单引号,反斜杠按原样打印,对于双引号,反斜杠用于打印特殊字符,例如$和``,但反斜杠和双引号是互斥的。
单引号内的变量和特殊字符不会被解析,但可以使用双引号来扩展这些元素。
此外,双引号可以解析转义字符和命令替换。
Linux还包括特殊字符,例如通配符(用于路径扩展)、元字符(例如用于后台执行的“&”和用于变量替换的“$”)和转义字符。
例如,通配符“*”匹配多个字符,“?”匹配单个字符,“[]”用于选择字符,“{}”定义字符范围。
转义字符主要包括单引号、双引号和反斜杠。
不解析单引号内的所有字符,但可以在双引号内执行软转义。
当在`echo`和`sed`等命令中使用时,反斜杠有特定的用途(例如\a`表示铃声,\b`表示后退字符等)。
有关Linux上这些功能的更多信息,请参阅松琴网的详细信息。