默认情况下程序输出到终端的字符样式为白字黑背景,样式、字体比较单一。如想改变程序输出到终端字符的样式等可使用ANSI转移码使其输出具有不同样式;
ANSI转义序
ANSI转义序列包括这三个部分组成:前置引导,CSI转义序列,结束符号
1、前置引导: 为ESC的ASCII值(33,x1b),标志此为控制命令,此时终端不会把后续当字符串解释,shell下可用e标识。
2、CSI转义序列:
控制输出样式,颜色、光标、下划线等
CSI转义序列由 [CSI序列;结束符 组成。
CSI序列包括:< PREFIX>;< COLOR>;< TEXT DECORATION> 三部分组成,分别为:
前缀;颜色;文本修饰器
文本修饰器:加粗 1,下划线 4,闪烁 5 前缀:颜色模式 16色,256色
颜色: 31-37 字体颜色、41-47 背景颜色
颜色代码:
0:黑色,1:红色,2:绿色,3:黄色,4:深蓝色,5:紫色,6:浅蓝色,7:白色
上述代码+30为字体颜色,代码+40为背景颜色;
例如:
[33;1m:
表示:黄色;下划线
3、结束符: m
结束符号m: 控制字符结尾,[0m :没有特殊参数的CSI序列,通知终端恢复正常,0m 关闭所有属性;
示例:
echo -e "x1b[33;1m字体x1b[0m"
终端输出的字符为:黄色加粗字体
在Golang中的使用:
func main() {
fmt.Printf("%c[33;1m黄色字体加粗%c[0m
", 0x1B, 0x1B)
fmt.Printf("%c[33;4m黄色字体下划线%c[0m
", 0x1B, 0x1B)
fmt.Printf("%c[42;30;1m绿色背景黑色字体下划线%c[0m
", 0x1B, 0x1B)
}
程序输出如图所示: