我有这样的代码:
#!/bin/bash
COLOR_REST='\e[0m'
COLOR_GREEN='\e[0;32m'
echo -e "${COLOR_GREEN}OK${COLOR_REST}"
当我将代码复制并粘贴到我的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作为我的操作系统。
答案 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
可以在不同的终端上移植。