如何在Mac OS X和Linux上使用“printf”输出彩色文本?
您可以使用ANSI颜色代码。以下是一个示例程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("%c[1;31mHello, world!\n", 27); // red
printf("%c[1;32mHello, world!\n", 27); // green
printf("%c[1;33mHello, world!\n", 27); // yellow
printf("%c[1;34mHello, world!\n", 27); // blue
return 0;
}
27
是表示转义字符的数字代码。如果您喜欢,可以使用 \e
。
各种网站都有完整的代码列表。 这里 就是其中之一。
# 首先定义一些颜色(可以将其放在您的.bashrc文件中): red='\e[0;31m' RED='\e[1;31m' blue='\e[0;34m' BLUE='\e[1;34m' cyan='\e[0;36m' CYAN='\e[1;36m' green='\e[0;32m' GREEN='\e[1;32m' yellow='\e[0;33m' YELLOW='\e[1;33m' NC='\e[0m' #################
然后在终端中输入:
echo -e "${RED}这是一个错误${NC}" echo -e "${YELLOW}这是一个警告${NC}" echo -e "${GREEN}一切正常!${NC}"
不要忘记在末尾加上 ${NC}。NC 代表“无颜色”,这意味着在您的句子之后,它会恢复到正常颜色。如果您忘记了它,整个提示和随后的命令都将是您指定的颜色(当然,您可以键入 'echo -e "${NS}"' 来改变它回来)。
为了最佳的可移植性,请查询terminfo数据库。在shell中,
colors=(black red green yellow blue magenta cyan white)
for ((i = 0; i < ${#colors[*]}; i++)); do
((j=(i+1)%${#colors[*]}))
printf '%s%s%s on %s%s\n' "$(tput setaf $i)" "$(tput setab $j)" \
"${colors[i]}" "${colors[j]}" "$(tput op)"
done
将打印出
黑色在红色上 红色在绿色上 绿色在黄色上 黄色在蓝色上 蓝色在品红色上 品红色在青色上 青色在白色上 白色在黑色上
但是以彩色方式呈现。
"\033"
代替"%c", 27
。 - ephemient\e
也可以工作。OS X的终端和大多数Linux控制台应用程序都支持ANSI转义序列,因此我认为它满足了他的问题。 - Carl Norum\e
是仅限于gcc的。 - Jackprintf
无关。终端程序本身会将这些转义码解释为命令,以更改其在屏幕上使用的颜色。 - Carl Norum