Linux 输出样式

用法

\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 章节还说了一些更加复杂的用法,比如光标控制、字符移动什么的,唉,误入水坑。

英文不好,懒得深究,大致知道了怎么用就行了。

对,就这样。

参考