不知道大家在看一些编程类的教程的时候有没有见过类似这样的界面。
这是neofetch
的输出界面,内容是当前操作系统的一些信息。如果获取操作系统信息不是我们本次要讨论的重点,本次我们要说的是如果打印出带颜色和效果的文本。
如何定义终端输出样式
打印格式
# 输出指定效果的文本
# 后面加上\033[0m可清除效果,这样后面再打印的文字就是默认效果了
# 具体可用的效果见下表1和表2
\033[效果m要打印的文本\033[0m
# 效果可以多个叠加,使用分号可以同时应用多个效果。
\033[效果;效果;效果m要打印的文本\033[0m
效果定义
代码 | 效果 |
---|---|
0 | 无 |
1 | 粗体&亮色 |
4 | 下划线 |
5 | 闪烁 |
6 | 补色 |
颜色定义
样式颜色 | 背景色 | 前景色 |
---|---|---|
黑色 | 40 | 30 |
红色 | 41 | 31 |
绿色 | 42 | 32 |
黄色 | 43 | 33 |
蓝色 | 44 | 34 |
紫色 | 45 | 35 |
青色 | 46 | 36 |
白色 | 47 | 37 |
不同语言打印效果
下面展示了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;
}