Linux有一个特殊的转义字符\033,他就是用来帮忙在控制台输出一下花里胡哨的东西的
格式如下:
echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"
其中echo -e的意思是:将转义后的内容输出到屏幕上;
例如:
echo -e "\033[40;33m Hello World \033[0m"
其中40的位置代表底色, 33的位置是代表字的颜色,\033就是转义开始,\033[0m是什么下面会说,'m'后面到\033[0m的前面就是需要输出到控制台上显示的字符串,所以Hello World!最终的输出会满足背景为40,颜色为33的字体;
我们输出一下:
因为40是黑色,这里和我的背景色重合了不明显,下面就是颜色对应的代码:
\033[X;X m …… \033[0m #X;X表示下面的数字
字颜色:30-----------37
30:黑
31:红
32:绿
33:黄
34:蓝色
35:紫色
36:深绿
37:白色
字背景颜色范围:40----47
40:黑
41:深红
42:绿
43:黄色
44:蓝色
45:紫色
46:深绿
47:白色
字体加亮颜色:90------------97
90:黑
91:红
92:绿
93:黄
94:蓝色
95:紫色
96:深绿
97:白色
背景加亮颜色范围:100--------------------107
100:黑
101:深红
102:绿
103:黄色
104:蓝色
105:紫色
106:深绿
107:白色
===============================================ANSI控制码的说明
\033[0m 关闭所有属性
\033[1m 设置高亮度
\033[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- \33[37m 设置前景色
\033[40m -- \33[47m 设置背景色
\033[nA 光标上移n行
\033[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\033[?25h 显示光标
\x1b[2J\x1b[$;1H $表示行位
需要注意的是ANSI的控制码的0是不能省略的
例如:\033[0m是不能写成\33[0m的;
演示
比如我们要输出黄色背景蓝色的字体:
echo -e "\033[43;34m Hello World \033[0m"
如果我们的ANSI控制码省略了0,会这样:
首先他这个\33[0m是直接输出了,说明没有被转义,而是被当作字符串了,我们知道ANSI控制码\033[0m是关闭所有属性的意思,既然没有被转义,说明我们并没有关闭所有属性,只有当检测到\033[0m的时候才会关闭这个黄色背景蓝色字体;
如下:
还有就是只有"\033[0m"是关闭所有属性,不要误以为ANSI控制码都能关闭所有属性,比如我们这样写:
echo -e "\033[43;34m Hello World \033[4m"
可能有人会觉得,一个\033对应一个\033[4m这样也可以正确输出,实际上:
它不仅没有关闭黄色背景蓝色字体,反而还加了一个下划线属性;
如果仅仅是想要输出一个黄色背景蓝色字体的并且带下划线的字符串,可以这样写:
echo -e "\033[43;34m Hello World \033[4m \033[0m"
记得写上\033[0m关闭所有属性即可:
还有一点需要注意,比如我们想输出黄色背景蓝色字体的Hello World!,注意这里带了!
如果我们还按原来那样写:
echo -e "\033[43;34m Hello World! \033[0m"
提示找不到! \033[0m;他把!和\033[0m视为一个整体了,解决方法如下:
把他们的距离拉开大一点就行了:
不过这样的话,我们的背景框好像输出的有点长了
可以写程序:
以上就是文章全部的内容了,感谢观看!