专门的术语叫做ANSI Escape sequences(ANSI Escape codes),题目并不恰当,与其说是屏幕输出控制,不如说是通过bash在兼容VT100的终端上进行输出。
主要有以下类别:
Esc[Value;...;Valuem -- 控制输出效果
Esc[Line;ColumnH
Esc[Line;Columnf -- 更改光标位置
以上控制符主要通过echo进行输出,其中Esc不是三个字母,而是ASCII的ESC字符' 33'或者'E',需要进行转义。
因为echo分为系统程序和bash的builtin等等,实现略有差异。有的echo需要使用-e参数,有的echo不支持'E'转义,需要用户自行判别。
此外其他可以向终端输出的程序,理论上也可以使用这些控制符,例如C语言的printf,python的print等等,不再赘述。
1. 控制输出效果
Esc[Value;...;Valuem
Value控制各种效果,例如前景色、背景色、粗体等等,可以在单个 Esc[Value;...;Valuem 中组合多个Value,也可以连续使用多个 Esc[Value;...;Valuem 进行。同类别的Value,后者覆盖前者。
一个例外是 Esc[0m,Value=0并且不与其他设置相组合,此时不仅仅覆盖同组的设置,还会清除之前的所有设置。Value列表如下:
Value | 含义 |
关闭所有效果 | |
0 | 关闭所有效果 |
1 | 粗体 |
2 | 暗色 |
4 | 下划线 |
5 | (闪烁)* |
7 | 反相 |
8 | 隐藏(隐藏) |
注:很多终端下闪烁无效
Value | 含义 | Value | 含义 |
30 | 前景色黑色 | 40 | 背景色黑色 |
31 | 前景色红色 | 41 | 背景色红色 |
32 | 前景色绿色 | 42 | 背景色绿色 |
33 | 前景色黄色 | 43 | 背景色黄色 |
34 | 前景色蓝色 | 44 | 背景色蓝色 |
35 | 前景色品红 | 45 | 背景色品红 |
36 | 前景色青色 | 46 | 背景色青色 |
37 | (前景色白色) | 47 | 背景色白色 |
2. 控制光标位置
Esc[Line;ColumnH
Esc[Line;Columnf
更改光标的位置,行与列均从0开始。Line或者Column留空表示0