0%

Shell 将 echo 输出的文字加上前景色、背景色、闪烁等效果

如何将 echo 输出的文字加上前景色、背景色、闪烁等效果

格式

1
echo -e "\033[31m hello \033[0m kitty"
  • 参数 “-e”
    确保 echo 将紧跟字符串转义处理
  • 格式 “\033[31m”
    “\033”(也可用”\e”)被转义为ESC, “\033[ XXX m”将修改当前输出属性, XXX 即例子中的 31为带设置的属性
  • 格式 “\033[0m”
    重置当前输出属性
  • “hello” “kitty”
    待输出字符串

属性

属性分为三大类

  • 字体颜色(前景色)
    范围: 30 - 37
  • 背景颜色
    范围:40 - 47
  • 特殊效果
    比如加粗,闪烁

列举几个简单的属性

十进制数 属性
30 字体为黑色
31 字体为黑色
40 背景色为黑色
41 背景色为红色
0 重置当前属性
1 字体加粗
5 字体闪烁

误区

网络上有一种格式

1
echo -e "\033[字背景颜色;字体颜色m字符串\033[控制码"

让人误以为第一个字段是设置背景颜色,第二个字段是字体颜色。其实不是,字体颜色、背景颜色、特殊效果三个属性所对应的范围是一个区间的不同区间段,他们并非“相互独立”,但却是”不会重合”,所以多个属性并没有顺序的限制。我们只要写下需要的属性,中间用 ;隔开。
比如:

1
2
echo -e "\033[31;44m hello \033[0m kitty"
echo -e "\033[44;31m hello \033[0m kitty"

都是蓝底红字。
限定一个顺序比如

1
echo -e "\033[字背景颜色;字体颜色;特殊效果m字符串\033[控制码"

这种格式会更整齐一点。

Reference & Thanks