多样化终端输出--样式控制'\003'
背景
昨天订阅了极客时间的“人人都能学会的编程入门课”,准备回炉重造下,刚好更新到:“教你输出彩色的文字”,才知道以前的C语言白学了,连\003都不知道,汗颜……在这里记录下
\003介绍
简介
控制终端内文字显示样式的转义字符'\033',这是一个八进制表示的转义字符,也可以写作十六进制的'\x1b',或者'\e'。通常情况下,三者是一致的,但是也只是“通常”。
格式
"\003[字符显示属性m要显示的字符串"
说明:
\003 样式控制转义字符
[ 和 m 之间的部分是显示属性,可以类比css样式,不过,只能控制显示方式、字符颜色、背景色。多个用分号分割
m 之后就是要显示的字符串内容了
更完整的格式是:
"\003[字符显示属性m要显示的字符串\003[m"
或者:
"\003[字符显示属性m要显示的字符串\003[0m"
说明:
结尾的\003[m 其实是相当于一个样式复位的操作,之后的字符串显示,还是按照默认样式进行
显示属性
显示方式:
0(默认值)、1(加粗)、2(灰显)、3(斜体)、4(下划线)、5(慢闪烁)、6 (快闪烁)、7(反显)、8 (隐藏)、9(删除线)
显示方式中:5、6、8测试,没有看出来任何效果……
字符的颜色:
30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(深蓝色)、35(紫色)、36(浅蓝色)、37(白色)
字符的背景颜色:
40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(紫色)、46(浅蓝色)、47(白色)
\003 测试使用
echo
- centos:
echo -e "\033[34;4mhello\033[m"
echo -e "\e[34;4mhello\e[m"
echo -e "\x1b[34;4mhello\x1b[m"
需要加 -e选项,才能解析转义字符,\033、\x1b、\e 均支持
- macOS:
echo -e "\033[34;4mhello\033[m"
echo -e "\e[34;4mhello\e[m"
echo -e "\x1b[34;4mhello\x1b[m"
可以不添加-e 选项,考虑通用性,尽量都添加
c中的printf
#include<stdio.h>
int main(){
printf("\033[34;4mhello\n\033[m");
return 0;
}
\033、\e、\x1b均支持
python中的print
print("\033[4;34mhello\033[m")
python2.7、3.7均只支持\033和\x1b,不支持\e
java System.out.print
public class Test {
public static void main(String[] args) {
System.out.println("\033[34;4mhello world\033[m");
}
}
java中支持\033,不支持\e、\x1b
关于结尾关闭字符\033[m
print("\033[4;34mhello") # 没有复位显示样式,下一行的输出样式,与第一行一致
print("hello")
总结
尽量只使用\033,因为它是最通用的,使用时,尽量带上结尾的样式复位\033[m