echo 命令颜色不起作用

Bri*_*ian 15 macos bash colors echo

我有这样的代码:

#!/bin/bash

COLOR_REST='\e[0m'
COLOR_GREEN='\e[0;32m'
echo -e "${COLOR_GREEN}OK${COLOR_REST}"
Run Code Online (Sandbox Code Playgroud)

当我将代码复制并粘贴到 iTerm 中时,它OK以绿色显示。

在此输入图像描述

但是,当我将代码存储在名为 的文件中testColor.sh并执行./testColor.sh. 它显示\e[0;32mOK\e[0m在我的屏幕上。

为什么不显示OK绿色?

我也尝试过bash testColor.sh,并且sh testColor.sh。两者都无法以绿色显示文本。

-e另一件我觉得奇怪的事情是,我在 .bsd 通用命令手册中没有看到该选项man echo

我使用 macOS High Sierra 作为我的操作系统。

Die*_*ano 14

使用

#!/bin/bash

COLOR_REST="$(tput sgr0)"
COLOR_GREEN="$(tput setaf 2)"
printf '%s%s%s\n' $COLOR_GREEN 'OK' $COLOR_REST
Run Code Online (Sandbox Code Playgroud)

它使用 printf 来避免echo选项并tput可以跨不同终端移植。


小智 5

使用printf代替echo应该可以在任何 POSIX 兼容的 shell 中工作。我在 High Sierra 中使用默认终端尝试了此操作,但它不起作用(没有任何扩展选项,只是-n)。

至于解释,我没有使用过 iTerm,所以我不完全确定,但可能是echoiTerm 的不同实现,这会导致该标志仅在使用 iTerm 本身而不是 /bin/bash 时才起作用。请注意,在 的手册页中echo,它说

注意:您的 shell 可能有自己的 echo 版本,它通常会取代此处描述的版本。请参阅您的 shell 文档,了解有关其支持的选项的详细信息。