终端彩色文字

Posted reaperspring

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了终端彩色文字相关的知识,希望对你有一定的参考价值。

彩色输出的格式为: e[颜色代码m文本e[m
e[*mem分别为开始与结束标记, 注意, 如果缺少结束标记, 后续输出也会被着色.
颜色代码有几种格式, 网上最常见的是8色, 其中:
30–37代表前景色, 分别为黑,红,绿,黄,蓝,品红,青,白.
40–47颜色一样,只是代表背景色.
90-97代表相应的前景亮色.
100-107代表背景亮色.
除了以上颜色代码,还有一些属性代码,
常见的有1,3,4,5,9分别为粗体,斜体,下划线,闪烁,划线(就是你写错字了,直接在错字上划一道)
以上代码由分号;分隔组合, 例如
e[31mHAHAHAe[m            红字HAHAHA
e[1;32mHAHAHAe[m         粗体绿色
e[34;4mHAHAHAe[m         下划线蓝色
e[1;31;42mHAHAHAe[m    绿底粗体红字
实际上8色里的颜色名只是代称, 和终端设置有关, 比如将gnome-terminal调色板里的
红色改成白色, 那么31实际显示的就是白色.

如果终端支持256色(大多数情况都支持吧...), 颜色格式必须指定前缀,
38;5和48;5分别代表前景背景, 例如:
e[38;5;1mHAHAHAe[m                 红色
e[1;38;5;1mHAHAHAe[m              粗体红色
e[1;38;5;1;48;5;2mHAHAHAe[m  背景绿色粗体红字

256色对应代码如下:

技术分享图片


如果终端支持真彩色, 那么前缀变为38;2与48;2, 这个具体就不介绍了, 256够用了.
另外如果彩色字符串是给PS1之类的提示符使用的, 则其起始标记必须被[和]包裹,
PS1="[e[31m]HAHAHA[e[m]"

因为可读性实在太烂, 极易出错,  最好写个函数规整一下, 网上没找到现成的工具, 发个自己写的吧:

_gce () { #{{{

    local co_code="$1" str="$2" is_ps="$3";

    co_code=$(echo "$co_code" | tr -d [:space:]);
    co_code=${co_code/A/;};

    if [[ ${co_code: -2} == :V ]]; then
        co_code=${co_code:0: -2};
        co_code=${co_code/F/;38;5;};
        co_code=${co_code/B/;48;5;};
    else
        co_code=${co_code//[FB]/;};
    fi
    co_code="${co_code:1}m";
    local co_str;
    if [[ $is_ps == ps ]]; then
        co_str="[e[$co_code]$str[e[m]";
    else
        co_str="e[$co_code$stre[m";
    fi
    echo -n "$co_str";
} #}}}

参数分别为: 颜色代码 字符串 是否为ps所用,
颜色代码格式为 [An] [Bn] [Cn] [:V]
A后接属性代表, 如粗体下划线等,以分号;分隔
F为前景色
B为背景色
默认以8色处理, :V只能出现在末尾,代表256色.

_gce "A1     F31  B42"      ‘str‘            绿色背景粗体红字
_gce "A1;3  F2           :V"   ‘str‘           粗斜体绿字, 256色处理
_gce "         F4           :V"  ‘str‘ ps        普通蓝字, 256色处理, 被[]包裹.




































以上是关于终端彩色文字的主要内容,如果未能解决你的问题,请参考以下文章

(原+转)ubuntu终端输出彩色文字

无法在终端上进行彩色打印

如何将彩色文本输出到 Linux 终端?

AEJoy ——表达式之彩色文字尾随特效JS

AEJoy ——表达式之彩色文字尾随特效JS

这个Python为啥......