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

On Linux, why can't 'echo' use ANSI color codes but 'print' could?

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

我的代码:

#!/bin/bash
echo "3[1;37;42m SUCCESS! 3[0m"

输出:

3[1;37;42m SUCCESS! 3[0m

但是,使用 'print' 确实有效:

#!/bin/bash
print "3[1;37;42m SUCCESS! 3[0m \n"

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

SUCCESS!

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

默认情况下,echo 会将其按字面意思解释为字符串。您必须告诉 echo 正确解释反斜杠。

来自文档:

-e enable interpretation of backslash escapes

echo -e "3[1;37;42m SUCCESS! 3[0m"