反斜杆e,Linux下五彩斑斓的命令行输出

问题:Linux下,如何让命令行输出带颜色的字符串?

我们知道,在Windows中,conio.h 中有许多操作控制台颜色、格式的函数。但是再 Linux 平台下却没有类似的函数。那Linux下如何实现这一虽不实用但可以炫酷的效果呢?

经过在网上的一番搜索,找到了解决此问题的方法——转义字符\e

注意,\e这种写法可能并不被你的编译器所支持(Linux下的GNU和Bash支持,亲测无误),因为他并不是ANSI C的。可以用\033代替。

此种方式在 Windows 下无效。

注意:格式更改之后,即使更改他的程序退出,格式也会保留,除非使用代码0清除或退出这个终端。

\e的大致使用方式为\e<控制串><带修饰的字符串>。用来控制字符串在控制台的输出效果(包括加粗、倾斜、颜色等)。注意,<控制传>只是表示这地方是个控制串,包裹它用的<>并不是我们要输入的内容,后面均用这种形式表示。

控制串的基本形式:[<数字><字母>,注意开头处有个左方括弧[

下面我们将对各种控制串的参数做详细的说明。

1. 基本格式控制

使用以下代码更改输出格式:

\e[<格式代码>m

下面是各种格式控制的代码:

代码十进制作用
0清除所有格式(常用在格式控制末尾,以免对后序字符串造成影响)
1加粗,与格式2冲突
2字体变暗,与格式1冲突
3斜体
4下划线
5呼吸闪烁(但有的机器上没效果))
6同上
7反显(背景色当前景色,前景色当背景色)
8隐形(字符仍然存在,可以选中,只是看不到)
9删除线

举例

#include<stdio.h>
int main()
{
        int i;
        printf("输出格式设置:0-9\n");
        for(i=0;i<=9;++i){
                printf("%d: \e[%dmHello,World!\e[0m\n",i,i);
        }
        return 0;
}

下面看在不同环境下的演示效果:

【虚拟机中的Ubuntu】
在这里插入图片描述

【FinalShell连接的CentOS】

不支持5、6呼吸闪烁,可以看到诸多8、9效果也不支持。
在这里插入图片描述

【PowerShell连接的CentOS】
在这里插入图片描述

2. 颜色控制

控制串基本格式:

\e[<颜色代码>m

注意<颜色代码>后面同样跟的是字母m

下面是各种背景色和前景的代码,可以发现:对于同一颜色,背景色代码=前景色代码+10

前景色代码颜色背景色代码
30黑色,注意和控制台的背景色稍有区别40
31红色41
32绿色42
33黄色43
34蓝色44
35紫色45
36青色46
37白色,但实际上是亮灰色47

举例:

// ================escapeE.c文件===============
#include<stdio.h>
int main()
{
    int i;
    
    printf("前景色设置:30-37\n");
    for(i=30;i<=37;++i){
        printf("%d: \e[%dmHello World!\e[0m\n",i,i);
    }

    printf("背景色设置:40-47\n");
    for(i=40;i<=47;++i){
        printf("%d: \e[%dmHello World!\e[0m\n",i,i);
    }

    return 0;
}

注意:清除格式同样会恢复默认颜色。 为了上一行的设置不影响下一行的行号,故显示完Hello World之后必须要用\e[0m清除格式。

下面看在不同环境下的演示效果:

【虚拟机中的Ubuntu】
在这里插入图片描述
【FinalShell连接的CentOS】
在这里插入图片描述
综合举例
上面分别讲了基本格式控制、前景色控制、背景色控制,那如果同时完成三者的控制呢?很简单,只需在各控制码之间加个分号就好,代码如下:

#include<stdio.h>
int main()
{
        int i;
        // 带颜色的格式控制:0-9
        printf("带颜色的输出格式设置:0-9\n");
        for(i=0;i<=9;++i){
                printf("%d: \e[42;31;%dmHello,World!\e[0m\n",i,i);
        }
        return 0;
}

虚拟机中的Ubuntu效果如下:
在这里插入图片描述
(这么大胆的配色,你喜欢吗?🧐)

3. 光标操作

使用以下代码执行控制台指令:

printf("\e%s", cmd);

其中cmd是指令字符串:

指令字符串作用
c清除屏幕,不可恢复(相当于clear命令)
[y;xH]将光标移至第x列第y行处
[nA将光标上移n
[nB将光标下移n
[nC将光标右移n
[nD将光标左移n
[K清除从光标(包括)到行末的内容
[s记录光标的位置(只能记一次)
[u恢复光标的位置
[?25l显示光标
[?25h隐藏光标

附录:参考文章

  1. 【黑科技】转义字符\e
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值