终端颜色代码在mac上的bash中不起作用

终端颜色代码在mac上的bash中不起作用,bash,Bash,根据,以下内容应输出彩色字符: $ 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 我是否需要启用/禁用某些设置来实现此功能?出于许可

根据,以下内容应输出彩色字符:

$ 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

我是否需要启用/禁用某些设置来实现此功能?

出于许可的原因,macOS上默认安装的Bash版本是3版,尽管4版自2009年以来一直存在。
\E
转义序列显然是在版本4或其一个次要版本中引入的,因此它在版本3中不起作用。然而,
\E
显然只是在v3中工作的
\E
的同义词,因此将代码段中的
\E
更改为
\E
应该允许它工作。

出于许可的原因,macOS上默认安装的Bash版本是版本3,尽管版本4从2009年就已经存在。
\E
转义序列显然是在版本4或其一个次要版本中引入的,因此它在版本3中不起作用。然而,
\E
显然只是
\E
的同义词,它在v3中可以工作,因此在代码片段中将
\E
更改为
\E
应该可以工作。

不确定真正的问题是什么,但可以使用Bash的
$“…”
语法作为ESC字符:

[步骤101]#B=($'\e[0;31m.$'\e[0;31m:'$'\e[1;31m+'$'\e[0;33m+'$'\e[1;33mU'$'\e[1;33mW'))
[步骤102]#echo${B[@]}
.:+U W
[步骤103]#
另一个选项是使用更一致的
printf

[步骤104]#printf'\e[1;31mhello\e[0m\n'
你好
[步骤105]#

不确定真正的问题是什么,但您可以使用Bash的
$'…'
语法作为ESC字符:

[步骤101]#B=($'\e[0;31m.$'\e[0;31m:'$'\e[1;31m+'$'\e[0;33m+'$'\e[1;33mU'$'\e[1;33mW'))
[步骤102]#echo${B[@]}
.:+U W
[步骤103]#
另一个选项是使用更一致的
printf

[步骤104]#printf'\e[1;31mhello\e[0m\n'
你好
[步骤105]#

这不起作用。另外,根据我的原始帖子,请注意运行
bash--version
返回
GNUBash,version 4.4.0(1)-发行版(x86_64-apple-darwin15.6.0)…
bash--version
可能没有使用与您使用的bash相同的bash。因此,请尝试在您正在运行的bash中使用
echo$bash\u version
。@jwodder,macOS没有使用最新bash的授权原因是什么?@pynexj据我所知,苹果拒绝提供任何根据GPLv3授权的产品,因为它与bash冲突r政策和目标。您可以自行安装GPLv3软件,例如使用自制软件包管理器。除非您的目标是专门探索
echo-e
在20多年后如何仍然造成可移植性问题,否则这里的核心答案应该是使用
printf
,但这不起作用。另外,请注意,在我的原始帖子中运行
bash--version
返回
GNUBash,版本4.4.0(1)-发行版(x86_64-apple-darwin15.6.0)…
bash--version
可能没有使用与您使用的bash相同的bash。因此,请尝试在您正在运行的bash中使用
echo$bash\u version
。@jwodder,macOS没有使用最新bash的授权原因是什么?@pynexj据我所知,苹果拒绝提供任何根据GPLv3授权的产品,因为它与bash冲突r政策和目标。您可以自行安装GPLv3软件,例如使用自制软件包管理器。除非您的目标是专门探索
echo-e
在20多年后如何仍然造成可移植性问题,否则这里的核心答案应该是使用
printf
对我有效(macOS+bash4.4)。在您的系统上,
类型echo
的输出是什么?@pynexj很抱歉我之前误读了您的评论。答案是它输出
echo是一个shell内置的
适合我(macOS+bash4.4)。在您的系统上,
类型echo
的输出是什么?@pynexj很抱歉我之前误读了您的评论。答案是它的输出
echo是一个shell内置的
注意:刚刚检查并确认,即使是旧的bash-2.05b的
$”…
printf
也支持
\e
。注意:刚刚检查并确认旧的bash-2.05b的
$'…'
printf
也支持
\e