花里胡哨,如何在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[@]}
do
if [ "$i" == "${color[5]}" ];then
exit 0
else
echo "$i"
fi
done
exit 0
输出结果:
这里,我们用到了上面介绍的用法,还用到了 $'' 的方式来代替$(echo -e) 赋值带有颜色的变量,可以看到的是,^[ 的适用性很强,\033[ 与 \e[ 的适用性较差,但可以通过echo -e 并赋值的方式实现,对了,是可以在同一段文字中加入不同颜色的,千万不要认为只能改变一整段内容,中间夹杂默认字符,需要使用参数0来恢复默认。
$'' 的具体原理是什么,我暂时不得而知,希望有知道的大佬指出。现在,我们可以输出这些带有颜色的字符了,并且,我们可以把这些字符赋值给变量,带入数组,编写一些输出颜色的提示之类的。不过要注意一下,带有颜色的字符,在逻辑判断的时候,与不带颜色的是不同的,所以你的判断没有起作用,很可能是拿两者直接比较了。
花里胡哨,如何在Linux终端输出带有颜色的字体,将带颜色的字体赋值给变量的更多相关文章
- 通过printf设置Linux终端输出的颜色和显示方式
转载自:http://www.cnblogs.com/clover-toeic/p/4031618.html 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出 ...
- linux 终端输出颜色
在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式 ...
- 花里胡哨之自定义linux终端前缀显示
文章目录 1.先看默认的linux终端前缀 2.查看默认的终端前缀变量 3.符号所代表的意义 4.修改PS1变量,达成自定义效果 4.1.只显示主机名和完整目录 4.2.给他点颜色看看 5.谢幕 1. ...
- 如何在 Linux 终端中知道你的公有 IP
导读 在本文中我将会介绍在几种在 Linux 终端中查看你的公有 IP 地址的方法.这对普通用户来说并无意义,但 Linux 服务器(无GUI或者作为只能使用基本工具的用户登录时)会很有用.无论如何, ...
- 如何在linux终端创建文件
我们都知道可以用mkdir命令创建一个新的目录,但更多时候如果能直接创建一个文件(普通文件)会让人感觉更愉悦:这样就可以不用在去打开一个专门的创建文本文件的软件,然后还要设置文件名,保存路径那样的繁琐 ...
- 如何在 Linux 终端下创建新的文件系统/分区
在 Linux 中创建分区或新的文件系统通常意味着一件事:安装 Gnome Parted 分区编辑器(GParted).对于大多数 Linux 用户而言,这是唯一的办法.不过,你是否考虑过在终端创建这 ...
- Linux终端复用神器-Tmux使用梳理
Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“ ...
- 在Linux终端中查看公有IP的方法详解
首先回顾一下一般的查看IP的命令: ifconfigLinux查看IP地址的命令--ifconfigifconfig命令用于查看和更改网络接口的地址和参数 $ifconfig -a lo0: fla ...
- linux 终端控制-- 多彩输出 格式排版
linux 终端控制-- 多彩输出 格式排版 在unix/linux的终端下,怎么控制终端输出的颜色和格式呢,当然了有专门的工具,tput,但是能被terminal直接读懂的格式化字符串更通用. 先来 ...
随机推荐
- Maven 设置阿里镜像
Maven 默认的中央仓库速度慢,可以考虑换成阿里的镜像.修改方式主要有两种. 1.针对所有项目修改中央仓库Maven 提供了全局配置文件 settings.xml 针对所有项目有效,位置是在安装目录 ...
- 原生JS实现简单富文本编辑器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vue 组件中锚点定位的问题
1 当前组件的顶部 this.$el.scrollIntoView() 2 指定的 Element this.$el.querySelector(selector).scrollIntoView() ...
- Linux 不同方法查看进程消耗CPU IO 等
1.用top命令指定固定的PID top -p 10997 查询指定进程的PID ps -ef | grep zookeeper jim 10997 1959 0 12月14 pts/2 00:00: ...
- [BJWC2008]王之财宝
嘟嘟嘟 如果没有限制,而且必须选\(m\)件的话,就是隔板法\(C_{n + m - 1} ^ {m - 1}\)了.现在要选至多\(m\)件,那么就相当于新增一个板儿,分出的新的盒子表示" ...
- 【csp模拟赛3】bridge.cpp--矩阵加速递推
题目描述 穿越了森林,前方有一座独木桥,连接着过往和未来(连接着上一题和下一题...). 这座桥无限长. 小 Q 在独木桥上彷徨了.他知道,他只剩下了 N 秒的时间,每一秒的时间里,他会向 左或向右移 ...
- Python 不覆盖输入txt 读取txt
不覆盖输入: with open('1.txt','rt')as f: data=f.read() print(data+"\n") 读取txt: with open('1.txt ...
- hive 调优(二)参数调优汇总
在hive调优(一) 中说了一些常见的调优,但是觉得参数涉及不多,补充如下 1.设置合理solt数 mapred.tasktracker.map.tasks.maximum 每个tasktracker ...
- 在树莓派4b上安装 ROS MELODIC 源码安装
按照以下步骤照做就可以了,很简单的,就是浪费一点点时间罢了.也可以退而求其次,买个树莓派3B+来玩,哈哈. Step 1: Install Dependecies and Download the P ...
- Linux 文件存在程序找不到文件
1. 编码格式 程序运行时的编码格式和传输到程序中参数的编码格式是否一致,可以在程序中打印日志进行验证: 2. 转义符 文件路径中存在转义符 3. 运行程序的用户身份 不同用户运行程序也可能导致编码格 ...