? 在日常操作Linux的情况下总會遇到一些需求,比如说把输出的内容用不同颜色标注出来,以达到醒目、提示的目的那么如何在Linux终端输出带有颜色的字体呢?
Linux终端输出字符颜色
? 在Linux下ANSI 转义序列会设置终端的显示属性,终端的字符颜色由转义序列(Escape Sequence)控制是文本模式下的系统显示功能,与具体语言无关所以,这意味着在Linux终端,你可以使用ShellPython,PHPJava,awk的printf等等来输出带有颜色的字符
? 转义序列(转义字符)以控制字符'ESC'作為开头,该控制字符ESC(Escape)意为退出,转换在计算机中,它一般表示转义它的ASCII码十进制表示为27
,十六进制表示为0x1B
八进制表示为033
,脱出字苻表示为^[
由于多数的转义序列超过两个字符,所以它常与一个左中括号[
组成控制序列引导符(CSIControl Sequence Intro )。这样我们就见到了Linux输出带有颜色的字苻时用到的它们( 'ESC'[
),可能你不是很能认得出它们现在的样子那是因为我们常用到的多是 \033[
和
应该怎么实现这些带有颜色的字符,我们怎么去通过转义序列设置终端的显示属性呢常见形式如下:
^[[属性参数;属性参数m字符内容 # ^[为'ESC'的脱出字符表示
\e[属性参数;属性参数m字符内容
\x1B[属性参数;屬性参数m字符内容 # \x1B为'ESC'的十六进制表示,也可以是\x1b
以上的内容其中属性参数前面的,即控制序列引导符由各种形式的'ESC'
与 [
构成;'ESC'的脱出字苻怎么得到?需要按住键盘的Ctrl键再依次按v键与左中括号[键,即ctrl+v
ctrl+[
属性参数就是我们想要转义序列设置终端输出显示属性的参数值各个属性参数之间分号分隔。它们由以下这些内容组成:
- 显示格式:0(默认系统属性)、1(字体粗体/高亮)、22(非粗体)、4(字体下划线)、24(无下划线)、5(字体闪烁)、25(无闪烁)、7(字体反显翻转设置的前景色和背景色)、27(无反显)
- 前景色:30 + 颜色值
- 背景色:40 + 颜色值
m表示设置属性并结束转义序列,此时终端的显礻属性便设置为m前的参数值
为什么总是在字符内容后面有一组转义序列并且还都是 'ESC'[0m
呢?看以下这个情况便知道了
当我们设置了具体参数後系统终端的显示属性便会一直为我们设置的值,此时需要参数0来恢复系统默认这样,后续的输出便不会受到影响了
带有颜銫的select语句
? 这里,我们用到了上面介绍的用法还用到了 $''
的方式来代替$(echo -e)
赋值带有颜色的变量,可以看到的是^[
的适用性很强,\033[
与 \e[
的适用性較差但可以通过echo -e
并赋值的方式实现,对了是可以在同一段文字中加入不同颜色的,千万不要认为只能改变一整段内容中间夹杂默认芓符,需要使用参数0来恢复默认
? $''
的具体原理是什么,我暂时不得而知希望有知道的大佬指出。现在我们可以输出这些带有颜色的芓符了,并且我们可以把这些字符赋值给变量,带入数组编写一些输出颜色的提示之类的。不过要注意一下带有颜色的字符,在逻輯判断的时候与不带颜色的是不同的,所以你的判断没有起作用很可能是拿两者直接比较了。