Shell 中输出彩色字体

发布于 2023-12-30

在 Shell 中输出彩色字体通常使用 ANSI 转义码来实现。 以下是一些基本的 ANSI 转义码示例:

  1. 文字颜色:
    • 使用 \e[颜色代码m 设置文字颜色。例如, \e[31m 设置为红色。

      echo -e "\e[31mThis is red text.\e[0m"
      
    • 这里 \e[0m 是用来重置颜色,确保不影响后续的文本。
  2. 背景颜色:
    • 使用 \e[背景颜色代码m 设置背景颜色。例如, \e[43m 设置为黄色背景。

      echo -e "\e[43mThis has a yellow background.\e[0m"
      
  3. 文字样式:
    • 使用 \e[样式代码m 设置文字样式。例如, \e[1m 设置为粗体。

      echo -e "\e[1mThis is bold text.\e[0m"
      
  4. 组合使用:
    • 可以组合使用多个 ANSI 转义码,例如设置红色背景、白色粗体文字。

      echo -e "\e[41m\e[1mThis is bold text with a red background.\e[0m"
      

下面是一些常见的颜色和样式代码:

  • 文字颜色代码:
    • 30:黑色
    • 31:红色
    • 32:绿色
    • 33:黄色
    • 34:蓝色
    • 35:紫色
    • 36:青色
    • 37:白色
  • 背景颜色代码:
    • 40:黑色
    • 41:红色
    • 42:绿色
    • 43:黄色
    • 44:蓝色
    • 45:紫色
    • 46:青色
    • 47:白色
  • 文字样式代码:
    • 1:粗体
    • 2:淡定(不同终端可能效果不同)
    • 4:下划线
    • 5:闪烁
    • 7:反显
    • 8:隐藏

请注意,不同终端对 ANSI 转义码的支持程度可能有所不同。

在 ANSI 转义码中, \e\033 都表示 ASCII Escape 字符,用于在终端中执行控制序列。 这两者是等效的,可以互相替代。以下是它们的区别:

  1. \e
    • \e 是一种相对较新的写法,更加简洁。
    • 在大多数现代的终端和 Shell 中,都支持 \e 作为 ASCII Escape 字符的一种写法。

      echo -e "\e[31mThis is red text.\e[0m"
      
  2. \033
    • \033 是 ASCII Escape 字符的八进制表示法,对应于十进制的 27。
    • 在一些老旧的终端或者一些特殊的环境中,可能需要使用 \033 ,因为有些终端不支持 \e

      echo -e "\033[31mThis is red text.\033[0m"
      

总体而言,大多数情况下我们可以选择使用更简洁的 \e 。 如果环境支持,推荐使用 \e ,它是一个更常见的写法。 但是,考虑到兼容性问题,使用 \033 也是一个较为保守的选择。