Bash打印颜色代码字面上而不是实际颜色

Adr*_*n E 10 bash terminal ansi-escape iterm

出于某种原因,我的shell脚本停止以彩色打印菜单,实际上是打印文字颜色代码.我有点逃避颜色编码吗?

脚本

#!/bin/bash 

function showEnvironments {
echo -e "\e[38;5;81m"
echo -e "      SELECT ENVIRONMENT       "
echo -e "[1] - QA"
echo -e "[2] - PROD"
echo -e "\e[0m"
}

showEnvironments
Run Code Online (Sandbox Code Playgroud)

产量

\ E [38; 5;81米

选择环境

[1] - 分期

[2] - 质量保证

\ E [0米

我在Mac OSX上使用iTerm,TERM环境变量设置为xterm-256color.

che*_*ner 10

echo -ebash3.2.x 的实现中有几个明显的错误,这是与Mac OS X一起提供的.文档声称\E(不\e)代表ESC,但似乎都不起作用.你可以printf改用:

printf "\e[38;5;81mfoo\e[0m\n"
Run Code Online (Sandbox Code Playgroud)

或使用(如您所见)\033代表ESC.

更高版本bash(肯定是4.3,可能更早的4.x版本)修复此问题并允许使用\e\E使用.


jgs*_*key 7

有两种方法:直接引用颜色或分配给变量,以便稍后在脚本中引用它们.

cNone='\033[00m'
cRed='\033[01;31m'
cGreen='\033[01;32m'
cYellow='\033[01;33m'
cPurple='\033[01;35m'
cCyan='\033[01;36m'
cWhite='\033[01;37m'
cBold='\033[1m'
cUnderline='\033[4m'

echo -e "\033[01;31m"
echo -e "hello"
echo -e "\033[00m"

echo -e "${cGreen}"
echo -e "hello"
echo -e "${cNone}"
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.