背景

​ 在日常操作Linux的情况下,总会遇到一些需求,比如说,把输出的内容用不同颜色标注出来,以达到醒目、提示的目的,那么如何在Linux终端输出带有颜色的字体呢?

Linux终端输出字符颜色

​ 在Linux下,ANSI 转义序列会设置终端的显示属性,终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关。所以,这意味着,在Linux终端,你可以使用Shell,Python,PHP,Java,awk的printf等等来输出带有颜色的字符。

​ 转义序列(转义字符)以控制字符'ESC'作为开头,该控制字符ESC(Escape),意为退出,转换,在计算机中,它一般表示转义。它的ASCII码十进制表示为27,十六进制表示为0x1B,八进制表示为033,脱出字符表示为^[ 。由于多数的转义序列超过两个字符,所以它常与一个左中括号[组成控制序列引导符(CSI,Control Sequence Intro )。这样,我们就见到了Linux输出带有颜色的字符时用到的它们( 'ESC'[),可能你不是很能认得出它们现在的样子,那是因为我们常用到的多是 \033[\e[

应该怎么实现这些带有颜色的字符,我们怎么去通过转义序列设置终端的显示属性呢?常见形式如下:

^[[属性参数;属性参数m字符内容         # ^[为'ESC'的脱出字符表示
\033[属性参数;属性参数m字符内容       # \033为'ESC'的八进制表示
\e[属性参数;属性参数m字符内容
\x1B[属性参数;属性参数m字符内容       # \x1B为'ESC'的十六进制表示,也可以是\x1b

以上的内容,其中属性参数前面的,即控制序列引导符,由各种形式的'ESC'[构成;'ESC'的脱出字符怎么得到?需要按住键盘的Ctrl键,再依次按v键与左中括号[键,即ctrl+v ctrl+[

属性参数就是我们想要转义序列设置终端输出显示属性的参数值,各个属性参数之间分号分隔。它们由以下这些内容组成:

  • 显示格式:0(默认系统属性)、1(字体粗体/高亮)、22(非粗体)、4(字体下划线)、24(无下划线)、5(字体闪烁)、25(无闪烁)、7(字体反显,翻转设置的前景色和背景色)、27(无反显)
  • 显示颜色:0(黑)、1(红)、2(绿)、 3(黄)、4(蓝)、5(洋红)、6(青)、7(白)
    • 前景色:30 + 颜色值
    • 背景色:40 + 颜色值

m表示设置属性并结束转义序列,此时终端的显示属性便设置为m前的参数值

为什么总是在字符内容后面有一组转义序列,并且还都是 'ESC'[0m 呢?看以下这个情况便知道了

当我们设置了具体参数后,系统终端的显示属性便会一直为我们设置的值,此时需要参数0来恢复系统默认,这样,后续的输出便不会受到影响了。

小例子

带有颜色的select语句

#!/bin/bash
color[0]='默认'
color[1]=$'\033[31m红色\033[0m'
color[2]=$(echo -e "\e[32m绿色\e[0m")
color[3]=`echo -e "\x1b[33m黄色\x1b[0m"`
color[4]="^[[34m蓝色^[[0m"
color[5]="exit"
PS3="请选择你的^[[47;4;31m选项^[[0m:"
select i in ${color[@]}
doif [ "$i" == "${color[5]}" ];thenexit 0elseecho "$i"fi
done
exit 0

输出结果:

​ 这里,我们用到了上面介绍的用法,还用到了 $'' 的方式来代替$(echo -e) 赋值带有颜色的变量,可以看到的是,^[ 的适用性很强,\033[\e[ 的适用性较差,但可以通过echo -e 并赋值的方式实现,对了,是可以在同一段文字中加入不同颜色的,千万不要认为只能改变一整段内容,中间夹杂默认字符,需要使用参数0来恢复默认。

$'' 的具体原理是什么,我暂时不得而知,希望有知道的大佬指出。现在,我们可以输出这些带有颜色的字符了,并且,我们可以把这些字符赋值给变量,带入数组,编写一些输出颜色的提示之类的。不过要注意一下,带有颜色的字符,在逻辑判断的时候,与不带颜色的是不同的,所以你的判断没有起作用,很可能是拿两者直接比较了。

转载于:https://www.cnblogs.com/TDXYBS/p/11190286.html

花里胡哨,如何在Linux终端输出带有颜色的字体,将带颜色的字体赋值给变量...相关推荐

  1. linux终端用什么颜色好,linux 终端输出颜色

    在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式 ...

  2. linux终端输出c语言程序,Linux终端程序用c语言实现改变输出的字的颜色

    颜色代码: 格式: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo "\033[41;36m something here \033 ...

  3. Linux系统json文件打中文,如何在 Linux 终端上漂亮地打印 JSON 文件

    JSON 文件非常棒,因为它们以人类可读的格式存储数据集合.然而,如果 JSON 文件被最小化过,那么阅读 JSON 文件可能会很痛苦. • 来源:linux.cn • 作者:Abhishek Pra ...

  4. 如何在Linux终端中复制和粘贴文本、文件和文件夹。

    复制和粘贴是电脑上使用最多的操作之一.虽然使用Ctrl+C和Ctrl+V键盘快捷键很容易做到这一点,但在Linux终端上就不是那么简单了.你有几种选择来完成这项工作.以下是你如何在Linux终端中复制 ...

  5. 通过printf设置Linux终端输出的颜色和显示方式

    前言 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文 ...

  6. 如何在Linux终端里用Shell和C输出带颜色的文字

    我们知道,使用ls命令列出文件列表时,不同的文件类型会用不同的颜色显示.那么如何实现这样带颜色的文本输出呢?答案并不复杂,不管是用shell还是C语言. 一.shell下的实现方法 先来讲在shell ...

  7. linux 屏幕输出 高亮_通过printf设置Linux终端输出的颜色和显示方式

    转载自:http://www.cnblogs.com/clover-toeic/p/4031618.html 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出 ...

  8. 如何在Linux终端中展示幻灯片

    导读 如果你需要在你的大学或公司的演示文稿中加入一些独特的风格,那么使用 Linux 终端怎么样?想象一下,这将是多么酷的事情啊! 演示文稿往往是枯燥的.这就是为什么有些人会添加动画或漫画/meme ...

  9. linux命令 upower -e,分享|如何在 Linux 终端下检查笔记本电池状态

    在图形界面下查看你的笔记本电池状态是很容易的,只需将鼠标指向任务栏中的电池图标上,你便可以很容易地知道电池的电量.但如果我们想要从命令行中获得这些信息呢?并不是所有人都知道如何做到这点.前几天我的一个 ...

最新文章

  1. ASP.NET MVC4 传递Model到View
  2. Linux阶段总结shell脚本
  3. ubuntu vscode 配置opencv3.0_ubuntu下配置vscode的c++环境
  4. 东方卫视演得泰坦机器人_东方卫视《笑傲江湖4》今晚开播,郭德纲、陈赫过招喜剧新人,机器人脱口秀惊艳全场...
  5. 2个字节能存多少个16进制_MySql中的varchar长度究竟是字节还是字符
  6. 高手经验:一个新手的verilog学习经验
  7. linux驱动中地址空间转换
  8. QGraphicsProxyWidget paintEvent(from 1+1 =2)
  9. Kubernetes中Pod生命周期
  10. 2017/4/12 afternoon
  11. c语言extern_C语言中#if,#if defined ,#ifdef,extern的用法描述
  12. OpenGl文章 Android OpenGL ES 简明开发教程
  13. ArcGIS Desktop软件安装和试用说明
  14. 关于dubbo通信协议之对比
  15. C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编
  16. windows7局域网网络共享文件夹和打印机的问题分析及解决
  17. python3读文件中文_详解Python3解决读取中文文件txt编码的问题
  18. 淘宝新手如何做推广 最新最全的淘宝店铺免费推广方法秘诀
  19. 【day8】【洛谷算法题】-P3954成绩-刷题反思集[入门1顺序结构][附一周思考总结]
  20. springboot学习(五)自动配置原理及@Conditional派生注解

热门文章

  1. python语言是什么时候诞生的_python诞生于什么时候
  2. 麦块我的世界怎么用java_麦块我的世界怎么玩啊?
  3. 两张照片重叠处半透明_美人计 | 林允儿的发型可真好看!拿着照片去找发型师吧...
  4. delphi 打包工具_每年帮你省钱20万的砖头打包方式,是你想要的吗?
  5. 快速创建包快捷键大全_99个CAD插件大全,各种工具箱和超实用辅助插件,绘图从此不卡顿...
  6. java获取object属性值_java反射获取一个object属性值代码解析
  7. Elasticsearch-PHP实战操作
  8. 微信开发之自动回复图文消息
  9. Keras【Deep Learning With Python】实现线性回归模型
  10. python【力扣LeetCode算法题库】67-二进制求和