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,所以我不完全确定,但可能是echo
iTerm 的不同实现,这会导致该标志仅在使用 iTerm 本身而不是 /bin/bash 时才起作用。请注意,在 的手册页中echo
,它说
注意:您的 shell 可能有自己的 echo 版本,它通常会取代此处描述的版本。请参阅您的 shell 文档,了解有关其支持的选项的详细信息。