跳到主要内容

如何在终端中输出彩色文字

· 5 分钟阅读 · - · - ·

不知道大家在看一些编程类的教程的时候有没有见过类似这样的界面。

neofetch

这是neofetch的输出界面,内容是当前操作系统的一些信息。如果获取操作系统信息不是我们本次要讨论的重点,本次我们要说的是如果打印出带颜色和效果的文本。

如何定义终端输出样式

打印格式

# 输出指定效果的文本
# 后面加上\033[0m可清除效果,这样后面再打印的文字就是默认效果了
# 具体可用的效果见下表1和表2
\033[效果m要打印的文本\033[0m

# 效果可以多个叠加,使用分号可以同时应用多个效果。
\033[效果;效果;效果m要打印的文本\033[0m

效果定义

代码效果
0
1粗体&亮色
4下划线
5闪烁
6补色

颜色定义

样式颜色背景色前景色
黑色4030
红色4131
绿色4232
黄色4333
蓝色4434
紫色4535
青色4636
白色4737

不同语言打印效果

下面展示了C语言、Java、NodeJs、PHP、Python和Shell的输出效果,其他语言理论上只要是往终端中输出,也是可以输出带效果的内容的。

不同语言打印效果

Bash

#!/usr/bin/env bash

print() {
textColor=${2-0}
bgColor=${3-0}
text=$1
echo -en "\033[${bgColor};${textColor}m${text}\033[0m"
}

print "这是使用Shell输出的"
print "红底黑色、" 30 41
print "红色、" 31
print "绿色、" 32
print "黄色、" 33
print "蓝色、" 34
print "紫色、" 35
print "青色、" 36
print "黑底白色" 37 40
print "的字
"

Javascript

#!/usr/bin/env node

console.log(
[
print("这是使用Javascript输出的"),
print("红底黑色、", 30, 41),
print("红色、", 31),
print("绿色、", 32),
print("黄色、", 33),
print("蓝色、", 34),
print("紫色、", 35),
print("青色、", 36),
print("黑底白色", 37, 40),
print("的字"),
].join("")
);

function print(text, textColor = 0, bgColor = 0) {
return `\x1b[${bgColor};${textColor}m${text}\x1b[0m`;
}

Python2

#!/usr/bin/env python
# -- coding: utf-8 --

from __future__ import print_function

def echo(text,textColor=0,bgColor=0):
print("\033[{0};{1}m{2}\033[0m".format(bgColor,textColor, text),end="")

echo("这是使用Java输出的")
echo("红底黑色、",30,41)
echo("红色、",31)
echo("绿色、",32)
echo("黄色、",33)
echo("蓝色、",34)
echo("紫色、",35)
echo("青色、",36)
echo("黑底白色",37,40)
echo("的字
")

PHP7

#!/usr/bin/env php

<?php

function _print(string $text, int $textColor=0,int $bgColor=0){
print("\033[{$bgColor};{$textColor}m{$text}\033[0m");
}


_print("这是使用PHP输出的");
_print("红底黑色、",30,41);
_print("红色、",31);
_print("绿色、",32);
_print("黄色、",33);
_print("蓝色、",34);
_print("紫色、",35);
_print("青色、",36);
_print("黑底白色",37,40);
_print("的字
");

Java

import java.text.MessageFormat;

public class ColorfulPrint {

public static void main(String[] args) {
print("这是使用Java输出的");
print("红底黑色、",30,41);
print("红色、",31);
print("绿色、",32);
print("黄色、",33);
print("蓝色、",34);
print("紫色、",35);
print("青色、",36);
print("黑底白色",37,40);
System.out.println();
}

private static void print(String text, int textColor, int bgColor) {
System.out.print(MessageFormat.format(
"\033[{0};{1}m{2}\033[0m",
bgColor, textColor, text
));
}
private static void print(String text, int textColor){
print(text,textColor,0);
}
private static void print(String text){
print(text,0);
}
}

C语言

#include <stdio.h>

void printTB(const char *text, int textColor, int bgColor)
{
printf("\033[%d;%dm%s\033[0m", bgColor, textColor, text);
}
void printT(const char *text, int textColor)
{
printTB(text, textColor, 0);
}
void print(const char *text)
{
printT(text, 0);
}
int main()
{
print("这是使用Java输出的");
printTB("红底黑色、", 30, 41);
printT("红色、", 31);
printT("绿色、", 32);
printT("黄色、", 33);
printT("蓝色、", 34);
printT("紫色、", 35);
printT("青色、", 36);
printTB("黑底白色", 37, 40);
print("的字
");
return 0;
}
该内容为本站原创,转载请注明本页地址
https://iamhefang.cn/code/how-print-colorful-text-in-terminal