简短回答:这取决于主机字符串解析器。
长答案:
这取决于字符串解析器;也就是说,实际接受字符串的代码段("\x1b[1mSome string\x1b[0m"
) 作为文字并解析转义字符 http://en.wikipedia.org/wiki/Escape_character使用反斜杠ANSI 转义序列 http://en.wikipedia.org/wiki/ANSI_escape_code.
- 对于支持十六进制转义的解析器(
\x
), then \x1b
(字符 0x1B)应该可以工作。
- 对于支持八进制转义的解析器(
\ddd
), then \033
(八进制 33)应该可以工作。
- 对于支持 unicode 转义的解析器(
\u
), then \u001B
应该管用。
快速阐述:\x
and \u
相似;\x
通常指单个字符,0-255,h十六进制基数。\u
含义相同(以十六进制表示),但支持两个字节(在大多数解析器中)并且通常指 16 位u尼科德字符。
正如您提到的,较少使用/支持的转义字符是\e
。这种转义最常用于期望发生大量 ANSI 转义的解析器/语言,例如 bash(以及大多数其他 shell)。
例如,Node.js https://nodejs.org/不支持\e
:
> console.log("\x1b[31mhello\x1b[0m")
hello
undefined
> console.log("\e[31mhello\e[0m")
e[31mhelloe[0m
undefined
也不Lua http://www.lua.org/:
> print('\x1b[31mhello\x1b[0m')
hello
> print('\e[31mhello\e[0m')
stdin:1: invalid escape sequence near '\e'
Or even Python https://www.python.org/:
>>> print("\x1b[31mhello\x1b[0m")
hello
>>> print("\e[31mhello\e[0m")
\e[31mhello\e[0m
>>>
Though PHP http://php.net/ does:
<?php
echo "\x1b[31mhello\x1b[0m\n"; // hello
echo "\e[31mhello\e[0m\n"; // hello