花里胡哨,如何在Linux终端输出带有颜色的字体,将带颜色的字体赋值给变量...
背景
在日常操作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终端输出带有颜色的字体,将带颜色的字体赋值给变量...相关推荐
- linux终端用什么颜色好,linux 终端输出颜色
在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式 ...
- linux终端输出c语言程序,Linux终端程序用c语言实现改变输出的字的颜色
颜色代码: 格式: echo "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo "\033[41;36m something here \033 ...
- Linux系统json文件打中文,如何在 Linux 终端上漂亮地打印 JSON 文件
JSON 文件非常棒,因为它们以人类可读的格式存储数据集合.然而,如果 JSON 文件被最小化过,那么阅读 JSON 文件可能会很痛苦. • 来源:linux.cn • 作者:Abhishek Pra ...
- 如何在Linux终端中复制和粘贴文本、文件和文件夹。
复制和粘贴是电脑上使用最多的操作之一.虽然使用Ctrl+C和Ctrl+V键盘快捷键很容易做到这一点,但在Linux终端上就不是那么简单了.你有几种选择来完成这项工作.以下是你如何在Linux终端中复制 ...
- 通过printf设置Linux终端输出的颜色和显示方式
前言 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文 ...
- 如何在Linux终端里用Shell和C输出带颜色的文字
我们知道,使用ls命令列出文件列表时,不同的文件类型会用不同的颜色显示.那么如何实现这样带颜色的文本输出呢?答案并不复杂,不管是用shell还是C语言. 一.shell下的实现方法 先来讲在shell ...
- linux 屏幕输出 高亮_通过printf设置Linux终端输出的颜色和显示方式
转载自:http://www.cnblogs.com/clover-toeic/p/4031618.html 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出 ...
- 如何在Linux终端中展示幻灯片
导读 如果你需要在你的大学或公司的演示文稿中加入一些独特的风格,那么使用 Linux 终端怎么样?想象一下,这将是多么酷的事情啊! 演示文稿往往是枯燥的.这就是为什么有些人会添加动画或漫画/meme ...
- linux命令 upower -e,分享|如何在 Linux 终端下检查笔记本电池状态
在图形界面下查看你的笔记本电池状态是很容易的,只需将鼠标指向任务栏中的电池图标上,你便可以很容易地知道电池的电量.但如果我们想要从命令行中获得这些信息呢?并不是所有人都知道如何做到这点.前几天我的一个 ...
最新文章
- ASP.NET MVC4 传递Model到View
- Linux阶段总结shell脚本
- ubuntu vscode 配置opencv3.0_ubuntu下配置vscode的c++环境
- 东方卫视演得泰坦机器人_东方卫视《笑傲江湖4》今晚开播,郭德纲、陈赫过招喜剧新人,机器人脱口秀惊艳全场...
- 2个字节能存多少个16进制_MySql中的varchar长度究竟是字节还是字符
- 高手经验:一个新手的verilog学习经验
- linux驱动中地址空间转换
- QGraphicsProxyWidget paintEvent(from 1+1 =2)
- Kubernetes中Pod生命周期
- 2017/4/12 afternoon
- c语言extern_C语言中#if,#if defined ,#ifdef,extern的用法描述
- OpenGl文章 Android OpenGL ES 简明开发教程
- ArcGIS Desktop软件安装和试用说明
- 关于dubbo通信协议之对比
- C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编
- windows7局域网网络共享文件夹和打印机的问题分析及解决
- python3读文件中文_详解Python3解决读取中文文件txt编码的问题
- 淘宝新手如何做推广 最新最全的淘宝店铺免费推广方法秘诀
- 【day8】【洛谷算法题】-P3954成绩-刷题反思集[入门1顺序结构][附一周思考总结]
- springboot学习(五)自动配置原理及@Conditional派生注解
热门文章
- python语言是什么时候诞生的_python诞生于什么时候
- 麦块我的世界怎么用java_麦块我的世界怎么玩啊?
- 两张照片重叠处半透明_美人计 | 林允儿的发型可真好看!拿着照片去找发型师吧...
- delphi 打包工具_每年帮你省钱20万的砖头打包方式,是你想要的吗?
- 快速创建包快捷键大全_99个CAD插件大全,各种工具箱和超实用辅助插件,绘图从此不卡顿...
- java获取object属性值_java反射获取一个object属性值代码解析
- Elasticsearch-PHP实战操作
- 微信开发之自动回复图文消息
- Keras【Deep Learning With Python】实现线性回归模型
- python【力扣LeetCode算法题库】67-二进制求和