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

一、shell下的实现方法

先来讲在shell下,如何实现。用echo命令就可以实现,参看以下例子:

echo  -e  "\033[32mHello, world!"

当你在终端里敲下这条命令后,是不是发现系统用绿色输出了"Hello,world!",不止如此,连之后的命令提示符都变成了绿色?不要着急,听我继续说。echo命令-e选项的作用是激活终端对反斜线转义符(即\)的解释。引号内\033用于引导非常规字符序列,在这里的作用就是引导设置输出属性,后边的[32m就是将前景色设置为绿色,字母m表示设置的属性类别,数字代表属性值。设置可以单独使用,例如:

echo -e  "\033[0m"

这行命令的作用是恢复属性为默认值,也就是说0m设置项用于恢复默认值。现在你的终端是不是又一切正常了?

理解了这些,剩下的就简单了。用这种命令,除了设置文本前景色,还可以设置很多属性。下边列出其他的设置项:

--------------------------------------------------------------------------

\033[0m 关闭所有属性
      \033[1m 设置高亮度
      \033[4m 下划线
      \033[5m 闪烁
      \033[7m 反显
      \033[8m 消隐
      \033[30m 至 \33[37m 设置前景色
      \033[40m 至 \33[47m 设置背景色
      \033[nA 光标上移n行 
      \033[nB 光标下移n行
      \033[nC 光标右移n行
      \033[nD 光标左移n行
      \033[y;xH设置光标位置
      \033[2J 清屏
      \033[K 清除从光标到行尾的内容
      \033[s 保存光标位置 
      \033[u 恢复光标位置
      \033[?25l 隐藏光标
      \033[?25h 显示光标

--------------------------------------------------------------------------

各数字所代表的颜色如下:

字背景颜色范围:40----49
      40:黑
      41:深红
      42:绿
      43:黄色
      44:蓝色
      45:紫色
      46:深绿
      47:白色

字颜色:30-----------39
      30:黑
      31:红
      32:绿
      33:黄
      34:蓝色
      35:紫色
      36:深绿 
      37:白色

另外,同类的多种设置项可以组合在一起,中间用分号(;)隔开。如下:

echo -e "\033[20;1H\033[1;4;32mHello,world\033[0m"

这行命令首先\033[20;1H将光标移动到终端第20行第1列,之后的\033[1;4;32m将文本属性设置为高亮、带下划线且颜色为绿色,然后输出Hello,world;最后\033[0m将终端属性恢复为默认值,这样就不会看到连命令完成后的命令提示符也变了样儿了。

通过以上各种命令的组合就可以实现对终端输出地复杂控制。

二、如何在C编程中实现?

理解了以上在Shell中的实现方法,关于在C中如何实现就很简单了。可以说只需要用printf函数代替上边的echo -e就OK了。参见下例:

int color = 32;

printf("\033[20;1H\033[1;4;%dmHello, world.\033[0m", color);

这个例子类似上边shell中最后那个例子,只是这里颜色值通过变量color来指定(当然,也可以直接指定)。

三、联想

看到这里你可能会想,是不是在其他编程语言里也可以用类似的方法实现对终端输出的控制呢?答案是肯定的!比如在Python中,可以如下输出:

color=32

print “\033[20;1H\033[1;4;%dHello, world.\033[0m"%color

这个例子的效果跟上边C的例子是相同的

如何在Linux终端里用Shell和C输出带颜色的文字相关推荐

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

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

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

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

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

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

  4. 【如何在linux系统里安装无线网卡驱动】

    如何在linux系统里安装无线网卡驱动 详细安装驱动步骤: [首先要根据自己的网卡型号(如果不知道网卡型号可以用驱动精灵验证一下)下载相应的驱动] 1把下载好的驱动文件拷贝到系统里面 2由于拷贝到系统 ...

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

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

  6. linux终端删除文件命令_如何在Linux终端中删除文件和目录

    linux终端删除文件命令 Fatmawati Achmad Zaenuri/Shutterstock.comFatmawati Achmad Zaenuri / Shutterstock.com T ...

  7. linux 电池信息,分享|如何在 Linux 终端下检查笔记本电池状态

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

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

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

  9. 如何在 Linux 终端中复制粘贴 [初学者教程]

    文章目录 1.在终端中使用键盘快捷键进行复制粘贴 2.在终端中复制和粘贴的另一种方法是使用右键单击上下文菜单. 3.在Linux终端使用鼠标中键(滚轮)复制粘贴 4.为什么 Linux 终端不使用&q ...

最新文章

  1. 用什么擦地最干净脑筋急转弯_22个数学脑筋急转弯答案,你能全部做出来吗?...
  2. table标签修改tr,td标签的行距
  3. codeforces 872 D. Something with XOR Queries(思维)
  4. session_start() 对 HTTP_REQUEST扩展/fsockopen函数 的影响
  5. RabbitMQ学习之Routing(4)
  6. SQL Server 2000中的数据转换服务 (DTS)
  7. vscode中打开pdf文件_提取pdf文件中的文字
  8. 回溯法采用的搜索策略_数值优化|笔记整理(3)——线搜索中的步长选取方法,线性共轭梯度法...
  9. 普通人如何快速翻身?
  10. protobuf序列化使用说明
  11. 关于cocoa 运行时runtime
  12. 039 我的技术成长历程
  13. C语言之for循环应用之断案篇----找凶手
  14. 112 洪聖民 捽翁
  15. golang的ping检测网络实现
  16. 438. 找到字符串中所有字母异位词【异位词-哈希数组】
  17. Android/安卓 设置按钮点击效果
  18. Java:图形界面实现桌面数字时钟
  19. 倒计时软件/倒计时工具/倒计时器
  20. 修复 dji spark 的 micro sd/tf 存储卡里不能正常播放的视频文件

热门文章

  1. JBOSS 5.0GA 配置布署
  2. vue项目中运用webpack动态配置打包多种环境域名
  3. 爱立信更换集团CTO Erik Ekudden将于7月1日上任
  4. 【特别好】【位运算】maximum-xor-of-two-numbers-in-an-array
  5. 黄哥漫谈Python 生成器
  6. Qt之进程间通信(IPC)
  7. 走过2011---年终总结
  8. 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改的记录数...
  9. linux下dhcp配置(一)
  10. NHibernate初学者指南(2):一个完整的例子