【发布时间】:2020-05-08 22:54:18
【问题描述】:
我已经阅读了大量页面,包括 bash 手册,但仍然发现反斜杠的“非显而易见”使用令人困惑。
如果我这样做:
echo \*
它打印一个星号,这是正常的,因为我正在逃避星号使其成为文字。
如果我这样做:
echo \\*
它打印\*
这似乎也很正常,第一个反斜杠转义了第二个。
如果我这样做了
echo `echo \\*`
它打印目录的内容。但在我看来,它应该与echo \\* 打印相同,因为当它被替换并传递给 echo 时。我知道这是每个人都在谈论的不明显的反斜杠使用,但我很难理解为什么会发生这种情况。
bash 手册也说
当使用旧式反引号形式的替换时,反斜杠保留其字面含义,除非后面跟着“$”、“`”或“\”。
但它没有定义“反斜杠的字面意思”是什么。它是作为转义字符、延续字符还是只是字面上的反斜杠字符?
另外,它说它保留了它的字面意思,除非后面跟着......那么当它后面跟着这三个字符之一时,它会做什么?它只逃避这三个字符吗?
【问题讨论】:
-
“字面意思”表示它实际上是字符串中的一个 ASCII 码点 92,而不是有向图的一部分。
-
请注意
echo \\*和echo $(echo \\*)打印相同的内容,并且$()通常是在子shell 中调用命令的首选方法。