多样化终端输出--样式控制'\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

参考

posted on 2020-01-07 16:03  某人的喵星人  阅读(1221)  评论(0编辑  收藏  举报