Skip to content

LV070-ANSI控制码

一、ANSI 控制码

1. 是什么?

ANSI 控制码用于在字符显示系统中控制光标移动和字符色彩等,常用于 BBS 系统中。 ANSI ESCAPE SEQUENCES 又称为 VT100 系列控制码,国内译为 ANSI 控制码。 ANSI 控制码依赖终端,不是依赖语言,所以在 shell , perl , C 里应用都是可以的。

ANSI 控制码开始的标志都为 ESC[ , ESC 对应 ASCII码表 的 033(八进制) ,在 Shell 编程中,输出的命令有 echo 和 printf , echo 需要用 -e 启用转义,两个输出命令通过 \033或者\e 来输入 ESC ,例如 \033[32m 即为 ESC[32m 。

2. 有哪些控制码?

\033[0m关闭所有属性
\033[1m设置高亮度
\033[4m下划线
\033[5m闪烁
\033[7m反显
\033[8m消隐
\033[30m ~ \033[37m设置前景色(字体色)
30:黑 31:红 32:绿 33:黄 34:蓝 35:紫 36:深绿 37:白
\033[40m ~ \033[47m设置背景色
40:黑 41:红 42:绿 43:黄 44:蓝 45:紫 46:深绿 47:白
\033[nA光标上移n行
\033[nB光标下移n行
\033[nC光标右移n行
\033[nD光标左移n行
\033[y;xH设置光标位置,将光标移动到y行x列的位置
\033[2J清屏,光标移到左上角
\033[K清除从光标到行尾的内容
\033[s保存光标位置
\033[u恢复光标位置
\033[?25l隐藏光标
\033[?25h显示光标

显示字符属性控制

shell
[n1;n2;......m

设定显示字符的属性状态。若有两个以上设定则以分号将代码隔开。除非重新设定,否则原设定之属性一直被保留,若想后边的不受影响,可以在结束后加一个 \033[0m 。

3. ANSI 码应用格式

  • echo
shell
echo -e "\033[颜色值m 文本" # 最后加上\033[0m可以使其不影响其他字体
  • printf
shell
printf  "\033[颜色值m 文本\n" # 最后加上\033[0m可以使其不影响其他字体

二、应用实例

1. echo

shell
#!/bin/bash
echo -e "\033[31m Hello World! \033[0m"
echo -e "\e[31m Hello World! \e[0m"
echo -e "\033[31;46m Hello World! \033[0m"

输出效果:

2. printf

shell
#!/bin/bash
printf "\033[31m Hello World! \033[0m Hello World!\n"
printf "\e[31m Hello World! \e[0m Hello World!\n"
printf "\033[31;46m Hello World! \033[0m Hello World!\n"

输出效果:

3. 自用变量定义

shell
BLACK="\033[1;30m"
RED='\033[1;31m'    # 红
GREEN='\033[1;32m'  # 绿
YELLOW='\033[1;33m' # 黄
BLUE='\033[1;34m'   # 蓝
PINK='\033[1;35m'   # 紫
CYAN='\033[1;36m'   # 青
WHITE='\033[1;37m'  # 白
CLS='\033[0m'       # 清除颜色

INFO="${GREEN}[INFO]${CLS}"
WARN="${YELLOW}[WARN]${CLS}"
ERR="${RED}[ERR ]${CLS}"