用法
\033[字背景颜色;字体颜色m...字符串...\033[0m
\e[字背景颜色;字体颜色m...字符串...\e[0m
注意:\033
和 \e
通用。
控制符
测试脚本:
# 从 0 - 1000,发现 107 之后没有任何效果
for ((i=0;i<=1000;i++)); do echo -e "${i}、\033[${i}m我爱北京天安门\033[0m <<<"; done;
# 两组前景色比较
for ((i=30;i<=37;i++)); do echo -e "${i}、\033[${i}m我爱北京天安门\033[0m <<<"; done;
for ((i=90;i<=97;i++)); do echo -e "${i}、\033[${i}m我爱北京天安门\033[0m <<<"; done;
# 两组背景色比较
for ((i=40;i<=47;i++)); do echo -e "${i}、\033[${i}m我爱北京天安门\033[0m <<<"; done;
for ((i=100;i<=107;i++)); do echo -e "${i}、\033[${i}m我爱北京天安门\033[0m <<<"; done;
根据测试,在不同的终端下的显示效果各有不同,下面的结果以 Gnome Terminal 为准:
- 0 清空所有样式,所以一般都是使用
\033[0m
结束样式输出 - 1 高亮,就是字体加粗
- 2 颜色变淡
- 3 斜体
- 4 下划线
- 5 据说是闪烁,但是没见到哪个终端支持
- 6
- 7 反色
- 8 不显示,只是占位
- 9 删除线
- 30 - 37 前景色
- 40 - 47 背景色
- 90 - 97 前景色
- 100 - 107 背景色
颜色表(常用)
颜色 | 前景 | 背景 |
---|---|---|
黑 | 30 | 40 |
蓝 | 31 | 41 |
绿 | 32 | 42 |
青 | 33 | 43 |
红 | 34 | 44 |
洋红 | 35 | 45 |
黄 | 36 | 46 |
白 | 37 | 47 |
遍历所有的样式
for STYLE in 0 1 2 3 4 5 6 7; do
for FG in 30 31 32 33 34 35 36 37; do
for BG in 40 41 42 43 44 45 46 47; do
CTRL="\033[${STYLE};${FG};${BG}m"
echo -en "${CTRL}"
echo -n " ${STYLE};${FG};${BG} "
echo -en "\033[0m"
done
echo
done
echo
done
# Reset
echo -e "\033[0m"
问题
看到 ArchWiki 上的一段代码,突然发现我的理解有问题。
原始代码(大致):
# 256 colors
for C in {16..255}; do
echo -en "\e[48;5;${C}m $C "
done; echo -e "\e(B\e[m";
测试代码:
echo -e "\e[48mxyz\e[0m <<<"
echo -e "\e[5mxyz\e[0m <<<"
echo -e "\e[180mxyz\e[0m <<<"
echo -e "\e[200mxyz\e[0m <<<"
echo -e "\e[48;5;180mxyz\e[0m <<<"
echo -e "\e[48;5;200mxyz\e[0m <<<"
单独测试 48、5、180、200 都没有样式,但是拼在一起,48;5;180 和 48;5;200 都有样式(不同的底色)。
而且 ArchWiki 上 Common capabilities 章节还说了一些更加复杂的用法,比如光标控制、字符移动什么的,唉,误入水坑。
英文不好,懒得深究,大致知道了怎么用就行了。
对,就这样。
参考
- SegmentFault,Bash Shell怎么打印各种颜色
- Linux公社,Linux修改Shell命令提示符及颜色
- ItEye,python 输出颜色与样式
- ArchWiki,Bash/Prompt customization
- 维基百科(en),ANSI escape code
- man 文档,man 一下那几个 term 开头的,尤其是 terminfo。
- Microsoft Learn, Color schemes in Windows Terminal