繁体   English   中英

无法使用环境变量打印 colors

[英]Can't print with colors by using environment variables

我有一个 .echo_colors 文件,其中包含 colors 的一些变量,格式如下:

export red="\033[0;31m"

这适用于 echo -e,但我想在 C 代码上使用此环境变量。 我通过 getenv 获取变量并使用 printf 打印:

#include <stdlib.h>
#include <stdio.h>

int main(){
    char* color = getenv("red");
    printf("%s", color);
    printf("THIS SHOULD BE IN RED\n");
    return 0;
}

有了这个程序,我得到

\033[0;31mTHIS SHOULD BE IN RED

该字符串只是被打印出来,而不是被解释为颜色代码。 printf("\033[0;31m")按我的意愿工作并以红色打印 output。 有关如何解决此问题的任何想法?

Bash 默认情况下不会将\033解释为“ESC”,从十六进制转储变量可以看出,而是“反斜杠,零,三,三”:

bash-3.2$ export red="\033[0;31m"
bash-3.2$ echo $red | xxd
00000000: 5c30 3333 5b30 3b33 316d 0a              \033[0;31m.

您需要使用不同的 Bash 语法来导出变量以使其解释转义序列(而不是echo -e这样做):

export red=$'\033[0;31m'

IE

bash-3.2$ export red=$'\033[0;31m'
bash-3.2$ echo $red | xxd
00000000: 1b5b 303b 3331 6d0a                      .[0;31m.

在 shell 脚本中使用^[ (Control-left-bracket) 键入export command ,如

$ export red="<ctrl-[>[0;31m"

在您的 shell 脚本中, ctrl-[实际上是转义字符(从终端键入,您可能需要使用 Ctrl-V 对其进行转义,因此它不会被解释为编辑字符,在这种情况下,放一个Ctrl-V 在转义字符前面)

如果你这样做

$ echo "<ctrl-[>[31mTHIS SHOULD BE IN RED"
THIS SHOULD BE IN RED                   (in red letters)
$ _

你会看到效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM