Bash反斜杠会转义后面的任何字符:
$ echo "Result: \e"
Result:
$ echo "Result: \\"
Result: \
然而,Bash反斜杠似乎有一个两级逃逸系统:
$ echo "Result: \\e"
Result:
如果我理解正确,在前面的示例中,第一个反斜杠会转义第二个反斜杠,从而产生反斜杠。然后,这个反斜杠会转义下一个字符e
。
如果e
被转义,为什么最后"
没有转义?我希望以下内容可以逃避它,但结果是一个简单的转义:
$ echo "Result: \\"
Result: \
这种选择性的两级转义如何表现,是什么触发它?
答案 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