2014-10-02 43 views
0

哪個Ansi轉義序列是最便攜和/或最簡單的,爲什麼?Best Ansi Escape開始

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轉義序列是什麼,或者想變得更加熟悉它,那麼在這裏你去:http://en.wikipedia.org/wiki/ANSI_escape_code

注:

所有轉義序列的上面曾經參與所有的Unix系統我都一直在使用,但是仍然必須依靠系統本身來解釋轉義代碼。例如,Windows 而不是允許除四個(BEL,L-F或換行符,C-R或回車符,當然還有BS或退格符)之外的任何類型的轉義碼,所以Ansi轉義序列將不起作用。

回答

0

簡短回答:它取決於主機字符串解析器。


龍答:

這取決於串分析器;即實際將字符串("\x1b[1mSome string\x1b[0m")用作文字的代碼片段,並使用反斜槓ANSI escape sequence解析escape characters

  • 對於支持十六進制轉義(\x)分析器,然後\x1b(字符0x1B)應該工作。
  • 對於支持八進制轉義的解析器(\ddd),則\033(八進制33)應該可以工作。
  • 對於支持unicode轉義的解析器(\u),則應該使用\u001B

快速闡述:\x\u是相似的; \x通常指單個字符0-255,在h exadecimal radix。 \u表示相同(因爲它以十六進制表示),但支持兩個字節(在大多數解析器中),通常指16位的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