在 Linux 上,为什么“echo”不能使用 ANSI 颜色代码,而“print”却可以?

0 linux bash shell redhat raspbian

作为练习,我制作了一个 shell 脚本,在屏幕上输出彩色消息。我试图使用 ANSI 颜色代码,但内容本身会输出。

我的代码:

#!/bin/bash
echo "\033[1;37;42m SUCCESS! \033[0m"
Run Code Online (Sandbox Code Playgroud)

输出:

\033[1;37;42m SUCCESS! \033[0m
Run Code Online (Sandbox Code Playgroud)

但是,使用“打印”确实有效:

#!/bin/bash
print "\033[1;37;42m SUCCESS! \033[0m \n"
Run Code Online (Sandbox Code Playgroud)

输出(白色字体+绿色背景):

SUCCESS!
Run Code Online (Sandbox Code Playgroud)

我在 Red Hat Enterprise Linux Server 版本 6.5 (Santiago) 和 Raspbian Jessie Lite 4.4 上对此进行了测试,并得到了相同的结果。据我所知以及我浏览过的所有搜索引擎结果,“echo”和“print”是相同的,除了“echo”包含换行符而“print”不包含换行符。为什么在这种情况下会有所不同?

Neh*_*ani 5

默认情况下,echo 会将其解释为字符串。您必须告诉 echo 适当地解释反斜杠。

从文档中:

-e 启用反斜杠转义的解释

echo -e "\033[1;37;42m SUCCESS! \033[0m"
Run Code Online (Sandbox Code Playgroud)