echo命令颜色不起作用

时间:2018-03-27 03:14:56

标签: bash macos colors echo

我有这样的代码:

#!/bin/bash

COLOR_REST='\e[0m'
COLOR_GREEN='\e[0;32m'
echo -e "${COLOR_GREEN}OK${COLOR_REST}"

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

enter image description here

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

为什么它显示OK绿色?

我还尝试了bash testColor.shsh testColor.sh。两者都无法以绿色显示文本。

我觉得奇怪的另一件事是我在-e的BSD通用命令手册中看不到man echo选项。

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

2 个答案:

答案 0 :(得分:4)

使用printf代替echo应该适用于任何符合POSIX标准的shell。我在High Sierra使用默认终端进行了尝试,但它没有工作(没有任何扩展选项,只有-n)。

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

  

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

答案 1 :(得分:4)

使用

#!/bin/bash

COLOR_REST="$(tput sgr0)"
COLOR_GREEN="$(tput setaf 2)"
printf '%s%s%s\n' $COLOR_GREEN 'OK' $COLOR_REST

使用printf来避免echo个选项,tput可以在不同的终端上移植。