根据this page,以下内容应输出彩色字符:
$ B=(' ' '\E[0;31m.' '\E[0;31m:' '\E[1;31m+' '\E[0;33m+' '\E[1;33mU' '\E[1;33mW');
$ echo -e ${B[*]}
相反,对于我来说,在Mac OS X(GNU bash,4.4.0)上,它只是简单地回应:
\E[0;31m. \E[0;31m: \E[1;31m+ \E[0;33m+ \E[1;33mU \E[1;33mW
我是否需要启用/禁用某些设置才能使其正常工作?
答案 0 :(得分:2)
出于许可的原因,默认情况下在macOS上安装的Bash版本是版本3,即使版本4自2009年以来一直存在。\E
转义序列显然是在版本4或其中一个次要版本中引入的,因此它在版本3中不起作用。但是,\E
显然只是\e
的同义词,它在v3中有效,因此将\E
更改为\e
在您的代码段中应该允许它工作。
答案 1 :(得分:1)
不确定真正的问题是什么,但您可以对 ESC char使用Bash的$'...'
语法:
[STEP 101] # B=($'\e[0;31m.' $'\e[0;31m:' $'\e[1;31m+' $'\e[0;33m+' $'\e[1;33mU' $'\e[1;33mW')
[STEP 102] # echo ${B[@]}
. : + + U W
[STEP 103] #
另一种选择是使用printf
更加一致:
[STEP 104] # printf '\e[1;31mhello\e[0m\n'
hello
[STEP 105] #