bash反斜杠两级转义如何表现?

时间:2018-03-03 13:40:23

标签: bash shell escaping

Bash反斜杠会转义后面的任何字符:

$ echo "Result: \e"
Result:
$ echo "Result: \\"
Result: \

然而,Bash反斜杠似乎有一个两级逃逸系统:

$ echo "Result: \\e"
Result:

如果我理解正确,在前面的示例中,第一个反斜杠会转义第二个反斜杠,从而产生反斜杠。然后,这个反斜杠会转义下一个字符e

如果e被转义,为什么最后"没有转义?我希望以下内容可以逃避它,但结果是一个简单的转义:

$ echo "Result: \\"
Result: \

这种选择性的两级转义如何表现,是什么触发它?

1 个答案:

答案 0 :(得分:0)

您提到的转义符\ e对应于键盘的“ Esc”键,而不是反斜杠转义符。要获取“ Esc”键字符,必须使用:

echo $'\e'

您获得UTF-8 char 0x001b,它是“ Esc”键代码(UTF-8)。

通过运行man bash来检查Bash的手册页,然后通过键入以下内容搜索“ \ e”:

/\\e

/用于查找,\\e用于转义\并获取\e

在Bash中,反斜杠表示“文字”。以下是我从GNU / Linux Mint中的bash 4.4.20获得的结果,并带有一些注释。

$ echo "Result: e"
Result: e
$ echo "Result: \e"
Result: \e

我对此结果(*)表示怀疑。

$ echo "Result: \\e"
Result: \e

在这里我们说:文字\和e。那就是它的印刷内容。

$ echo "Result: \\\e"
Result: \\e

我们在这里说:一个文字\和一个转义字符。

$ echo "Result: \\\\e"
Result: \\e

两个文字\。

$ echo "Result: \\\\\e"
Result: \\\e

两个文字\和一个转义字符。

$ echo "Result: \\\\\\e"
Result: \\\e

以此类推。

\ e不能在回显中用作转义符,您必须使用\

(*)此结果可能对应于echo $"\e"。根据手册页:

  

在双引号前面加上一个美元符号的字符串($“ string”)将   使字符串根据当前语言环境进行翻译。

在Bash中,我得到:

$ echo $"\e"
\e