echo -e
一.ASCII 编码表简介
echo -e 的意思:如果字符串中出现某些特定的字符组合(转义字符),echo会将这些字符组合解释为特殊的含义,而不是将其作为普通文本输出。
ASCII 编码表,中前三十个左右都是控制字符,控制字符的意思是可以实现一些控制,比如换行等。
其中有一个字符是控制终端颜色的,十进制就是 27,ASCII还有两个字符:0 和x 表示转义字符,意思是0或是x后面紧跟的字符作用是实现控制,而不是直接输出。
比如:
echo -e "bbb \n aaa"
echo -e "bbb \012 aaa"
echo -e "bbb \xA aaa"
上面三种的输出是一样的.
实际上\xA 和 \012 意思就是将十六进制的 A 和 八进制的12 转成了ASCII编码表对应的转义字符,也就是\n.
分析->这里的 \012 意思就是12这个数字是是实现做控制的,\0作为控制标志位,指的就是八进制,\012 用八进制实现的控制,实际上转成十进制就是->10 找到下图中,10对应的就是**\n**, 同理\x也是控制位标志符,指的是用十六进制, 10 的八进制是12,十六进制是 A
因此\012 和\xA 都是表示换行。
1.2 和换行符控制字符一样,终端颜色也有自己的十进制控制符
数字 27 对应的就是颜色中断控制。 我们想要控制的话就用: \033 或者\x1b 二者转成十进制都是 27 ,再通过ASCII编码表我们找到27对应的转义字符是:\e. 因此我们有如下结论:
echo -e "\033[32m 测试 \033[0m"
echo -e "\x1b[32m 测试 \033[0m"
echo -e "\e[32m 测试 \e[0m"
三种写法都一样,我们只分析八进制的写法吧:
1. \033 开启颜色渲染
2. [32m 是固定写法,意思背景色设为绿色, 此时你的shell终端字体背景色会一直是绿色
3. \033[0m 的意思是再次开终端颜色控制,颜色设为终端默认。这样就恢复原样了
分析:echo -e 的意思:如果字符串中出现某些特定的字符组合(转义字符),echo会将这些字符组合解释为特殊的含义,而不是将其作为普通文本输出。
1.3 颜色的写法
[SRG显示方式;前景色;背景色m
SRG参数用于控制样式
显示方式 意义
-------------------------
0 终端默认设置
1 高亮显示
4 使用下划线
5 闪烁
7 反白显示
8 不可见
\033[1;31;40m 含义是:1->高亮显示 31->前景色红色 40->背景色黑色 m->颜色结束标志
1.4颜色参考图表
前景色: 30~37
背景色:40~47
一个例子:
前景色: 30~37
背景色:40~47
echo -e "\e[31;42m 测试 \e[0m"
echo -e "\e[31m 测试 \e[0m" ->31 在{ 30~37 }范围内表示 前景色
echo -e "\e[42m 测试 \e[0m" ->42 在{ 40~47 }范围内表示 背景色
除了上面直接用颜色参考表,还可以用rgb以及256颜色模式。下面分别讲解
二. rgb颜色模式
红,绿,蓝 就是RGB, 分别用0-255之间的数字表示颜色深浅, 这三个位数可以组合出很多种颜色。
网上有不少rgb颜色选择器,不需要我们自定义数字。比如:255;255;255 就表示一种颜色
2.1 怎么使用RGB颜色控制模式呢?
语法: ESC[ … 38;2;;
echo -e "\e[38;2;255;255;255m 测试 \e[0m "
echo -e "\e[48;2;255;255;255m 测试 \e[0m "
2->表示用rgb来表示颜色
38->前景色
48->表示背景色
三.256颜色表
256颜色模式和RGB颜色模式是两种不同的颜色表示方法,它们在颜色数量和表达方式上有所区别。
在256颜色模式中,颜色的数量是256种。这种模式通常用于早期的计算机图形和图像处理,因为它需要的颜色数量较少,计算速度快,但色彩表现相对有限。
相比之下,RGB颜色模式是一种更广泛使用的颜色表示方法,它使用红、绿、蓝三种基本颜色来混合出各种颜色。通过不同的组合方式,RGB颜色模式可以表示无数种颜色,因此在现代计算机图形和图像处理中应用广泛。
总体来说,256颜色模式和RGB颜色模式的主要区别在于颜色数量和表达方式。256颜色模式提供有限的256种颜色,适合早期的计算机图形和图像处理;而RGB颜色模式可以表示无数种颜色,在现代计算机图形和图像处理中更为常用。
3.1怎么使用256颜色控制模式呢?
语法:ESC[ … 38;5;数字
echo -e "\e[38;5;218m 测试 \e[0m"
echo -e "\e[48;5;218m 测试 \e[0m"
说明:
38->表示前景色,
48->表示背景色
5->表示 这是用的256颜色规则
218->在256颜色表表示粉色
四. 代码中输出颜色
-
java
System.out.println("\033[48;5;218m 测试 \033[0m");
-
python
print("\033[48;5;218m 测试 \033[0m");
-
c++
std::cout << "\033[1;31mI ♡ You \e[0m" << std::endl;