哪种Ansi转义序列最便携和/或最简单?为什么?
1. "\u001B[32;1mThis is bright green\u001B[0m"
2. "\x1B[33;1mThis is bright yellow\x1B[0m"
3. "\e[35;4;1mThis is bright purple underlined\e[0m"
我一直习惯使用printf "\x1B[32;1mgreen\x1B[0m"
(这是unix bash脚本中的一个例子),但我想知道是否有任何理由使用一个而不是另一个。比其他人更便携吗?这将是我的假设。
此外,如果您知道任何其他Ansi Escape序列,请随时在评论或答案结尾处分享。
如果您不知道Ansi Escape序列是什么或想要更熟悉它,那么请转到:http://en.wikipedia.org/wiki/ANSI_escape_code
注:
上面的所有转义序列都适用于我所使用的所有Unix系统,但是仍然必须依赖系统本身来解释转义码。例如,Windows 不允许任何类型的转义码除了四个(BEL,LF或换行,CR或回车,当然还有BS或退格),因此Ansi转义序列不起作用
答案 0 :(得分:2)
简答:这取决于主机字符串解析器。
答案很长:
这取决于字符串解析器;也就是说,实际接受字符串("\x1b[1mSome string\x1b[0m"
)作为文字的代码片段,并使用反斜杠escape characters解析ANSI escape sequence。
\x
)的解析器,\x1b
(字符0x1B)应该有效。\ddd
)的解析器,\033
(八进制33)应该有效。\u
)的解析器,\u001B
应该有效。快速阐述:
\x
和\u
相似;\x
通常是指 h 十字形基数中的单个字符0-255。\u
表示相同(因为它以十六进制表示),但支持两个字节(在大多数解析器中),通常是指16位 u nicode字符。
如您所述,较小的已使用/支持的转义字符为\e
。这种转义最常用于期望发生大量ANSI转义的解析器/语言,例如bash(以及大多数其他shell)。
例如,Node.js不支持\e
:
> console.log("\x1b[31mhello\x1b[0m")
hello
undefined
> console.log("\e[31mhello\e[0m")
e[31mhelloe[0m
undefined
Lua:
> print('\x1b[31mhello\x1b[0m')
hello
> print('\e[31mhello\e[0m')
stdin:1: invalid escape sequence near '\e'
甚至Python:
>>> print("\x1b[31mhello\x1b[0m")
hello
>>> print("\e[31mhello\e[0m")
\e[31mhello\e[0m
>>>
虽然PHP有:
<?php
echo "\x1b[31mhello\x1b[0m\n"; // hello
echo "\e[31mhello\e[0m\n"; // hello