http://blog.csdn.net/hejinjing_tom_com/article/details/12162491
引言: 由于在c代码中看到过打印彩色字, 又对PS1 想进一步了解,才有了这篇博文。
Linux 终端控制台字体颜色
Linux 终端控制台字体颜色,用到一个 转义序列
e[F;B;Om
e 转义字符开始,ESC 的 ASCII 码用十进制表示就是 27,等于用八进制表示的 033。
e 或 33 声明了转义序列的开始,
[ 开始定义颜色。
'F' 为字体颜色,编号30~37;
'B' 为背景色,编号40~47。
'O' 为特殊意义代码
它们的顺序没有关系。
m 是标记
m 后面不用跟空格,是所定义的彩色字和背景
颜色表
前景 背景颜色
-------------------------
30 40 黑色
31 41 红色
32 42 绿色
33 43 黄色
34 44 蓝色
35 45 洋红
36 46 青色
37 47 白色
特别代码意义
-------------------------
0 OFF
1 高亮显示
4 underline
5 闪烁
7 反白显示
8 不可见
应用1:解释带颜色的PS1
PS1="
e[32m
[u@h w](
e[m
"
解释:
为成组表示
定义[u@h w]) 为前景色绿色。 然后恢复默认设置。
应用2:用控制台输出彩色字或彩色背景
echo -e " 33[34;1mthis is high lighted blue 33[0m"
c 代码: printf(" 33[34;1mthis is high lighted blue 33[0m
" );
尾部的 33[0m 恢复了系统默认颜色
直到我看过了echo 程序的源码, 才对echo -e 的输出有了更深的理解。
那个双引号" 是bash分辨词素的标记,这样可以在双引号中加空格,整个双引号内容(不含双引号本省)被当做一个argv传递。
echo -e 还支持回车,换行,tab,响铃,垂直分割线以及16进制字符数据(x## 2bytes)。
当然,上句的printf, 更是简单的字符串照印了,注意了, 33 可是8进制数据,代表一个27 字符
下面看几个例子:
echo -e " 33[30m 黑色字 33[0m"
echo -e " 33[31m 红色字 33[0m"
echo -e " 33[32m 绿色字 33[0m"
echo -e " 33[33m 黄色字 33[0m"
echo -e " 33[34m 蓝色字 33[0m"
echo -e " 33[35m 紫色字 33[0m"
echo -e " 33[36m 天蓝字 33[0m"
echo -e " 33[37m 白色字 33[0m"
echo -e " 33[40;37m 黑底白字 33[0m"
echo -e " 33[41;37m 红底白字 33[0m"
echo -e " 33[42;37m 绿底白字 33[0m"
echo -e " 33[43;37m 黄底白字 33[0m"
echo -e " 33[44;37m 蓝底白字 33[0m"
echo -e " 33[45;37m 紫底白字 33[0m"
echo -e " 33[46;37m 天蓝底白字 33[0m"
echo -e " 33[47;30m 白底黑字 33[0m"