终端颜色代码在我的mac上无法使用bash

时间:2018-01-13 05:40:55

标签: bash

根据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

我是否需要启用/禁用某些设置才能使其正常工作?

2 个答案:

答案 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] #