前端时间,写了一篇 PHP 在 Console 模式下的进度显示 ,正好最近的一个数据合并项目需要用到控制台颜色输出,所以就把相关的信息整理下,写到OSC的博客中。
  请注意,此篇文章中的颜色仅适用于仿真器(putty、secureCRT、XShell),以及unix终端,不适用于CMD(但依然可用于WIN下的仿真器)
 
 简介
 
 在终端或仿真器中输入下面的代码,并回车,预览最直接的效果。
 echo  -e "\033[1;31mI ♡  You \e[0m" 
  请注意,引号内的\e等同于\033;\033、\x1b和\e效果是一样,对应键盘左上角Esc键对应的ASCII码(8进制);
 
 通用的控制文本颜色的转义序列格式如下:
 CSI n1 [;n2 [;…]] m 
 其中CSI全称为“控制序列引导器”(Control Sequence Introducer/Initiator),也就是上述示例中的"\033["(其中\033是你键盘左上角Esc键对应的ascii码(八进制));
 n1、n2等表示SGR参数(下面会列出一些常用的SGR参数),用于控制颜色、粗体、斜体、闪烁等文本输出格式;m表示转义序列结束。
 颜色参数
 常用颜色
 格式:\033[显示方式;前景色;背景色m  说明: 前景色            背景色           颜色 --------------------------------------- 30                40              黑色 31                 41              红色 32                42              绿色 33                43              黃色 34                44              蓝色 35                45              紫红色 36                46              青蓝色 37                47              白色  显示方式           意义 ------------------------- 0                终端默认设置 1                高亮显示 4                使用下划线 5                闪烁 7                反白显示 8                不可见  例子: \033[1;31;40m    <!--1-高亮显示 31-前景色红色  40-背景色黑色--> \033[0m          <!--采用终端默认设置,即取消颜色设置--> 
 
 RGB颜色
 
 使用方式:
 ESC[ … 38;2;<r>;<g>;<b> … m Select RGB foreground color ESC[ … 48;2;<r>;<g>;<b> … m Select RGB background color 
  特别注意:此处用法需从38开始设置, 代表前景色,48 代表后景色;2 代表RGB模式,后面三位为RGB数值。前后仍可使用SRG参数
 
 例子:
 echo  -e "\033[1;38;2;255;85;85mI ♡  You \e[0m" 
  附:经测试,在不是用SRG参数的情况下,可将;替换为:但在使用SRG参数时无效。 即:echo  -e "\033[38:2:255:85:85mI ♡  You \e[0m"
 
 256色模式
 
 使用方式:
 ESC[ … 38;5;<n> … m Select foreground color ESC[ … 48;5;<n> … m Select background color 
 例子:
 echo  -e "\033[1;38;5;9mI ♡  You \e[0m" 
 SRG控制参数
 | 0  |   关闭所有格式,还原为初始状态 |  | 1  |    粗体/高亮显示                       |  | 2  |     模糊(※)                          |  | 3  |     斜体(※)                          |  | 4  |     下划线(单线)                    |  | 5  |     闪烁(慢)                          |  | 6  |     闪烁(快)(※)                 |  | 7  |     交换背景色与前景色              |  | 8  |     隐藏(伸手不见五指,啥也看不见)(※) |  
  (1)其中含有(※)标注的编码表示不是所有的终端仿真器都支持,只有少数仿真器支持。
 
  (2)多个SGR参数可以组合使用,例如:echo -e "\x1b[31;4mRed Underline Text\e[0m"输出红色下划线字体“Red Underline Text”。
 
  (3)更多参数信息请参考“ANSI escape code”。
 
 各语言下的控制台颜色输出
 PHP
 // hello.php <?php echo "\033[1;38;5;9mI ♡  You \e[0m\n"; 
  请注意此处使用的是"而不是单引号,因为颜色代码需要转义,正如echo的-e一样。
 
 C
 // hello.c #include <stdio.h> int main() {     printf("\033[1;31mI ♡  You \e[0m\n"); } 
  编译:gcc hello.c
 
  运行:./a.out
 
 C++
 // hello.cpp #include <iostream> int main() {     std::cout << "\033[1;31mI ♡  You \e[0m" << std::endl; } 
  编译:g++ hello.cpp
 
  运行:./a.out
 
 Java
 // hello.java class hello {     public static void main(String[] args) {        System.out.println("\033[1;31mI ♡  You \033[0m");     } } 
  注:Java中不能识别\e和\0x1b,仅可使用\033。
 
  编译:javac hello.java
 
  运行:java hello
 
 Python
 # hello.py print "\033[1;31mI ♡  You \x1b[0m" 
  注:python(v2.6.5)中不能识别\e,可以使用\033和\x1b。
 
  运行:python hello.py
 
 相关链接
 PHP Color Class
 wikipedia ANSI_escape_code
 LINUX彩色的终端命令行 - 使用 ANSI 色彩代码
 Linux终端和win32控制台文本颜色输出
 教你写一个color日志库,不止有代码还有原理