Function 如何创建特殊彩色回波的功能?

Function 如何创建特殊彩色回波的功能?,function,shell,colors,printf,echo,Function,Shell,Colors,Printf,Echo,要打印彩色单词,我可以在shell中执行以下操作: declare -A COLORS COLORS["red"]='\033[0;31m' COLORS["default"]='\033[0m' echo -e "${COLORS["red"]}abc${COLORS["default"]}" # With color echo -e "xyz" # No color. echo -e "${COLORS["red"]}lmn${COLORS["default"]}" # With c

要打印彩色单词,我可以在shell中执行以下操作:

declare -A COLORS
COLORS["red"]='\033[0;31m'
COLORS["default"]='\033[0m'

echo -e "${COLORS["red"]}abc${COLORS["default"]}" # With color
echo -e "xyz"    # No color.
echo -e "${COLORS["red"]}lmn${COLORS["default"]}" # With color
但是,当需要颜色的调试消息到处都是时,复制+粘贴带有颜色的行很难维护

我试着把它放在这样一个函数中:

function RedPrint () {
    echo -e "${COLORS["red"]}$1${COLORS["default"]}" >&2
}
很好的一点是红色打印允许全局变量:

G="hahaha"
RedPrint "abc $G foo bar"

RedText "blah blah "${G}" foo foo bar"
但我肯定有一些我没有遇到的警告。功能化的
RedPrint
是否与我使用
echo-e
的方式相同

问题(部分)是:

  • 有没有更简单的方法来操纵shell中的颜色?还有其他选择吗
  • 带有
    echo
    的功能是维护彩色打印的好方法吗?还有什么方法可以编写
    RedPrint

据我所知,没有其他主要方法可以输出彩色文本

唯一其他可能的替代方法是使用
tput
生成色码,因为
tput
在输出值之前会考虑当前终端的能力(更适合跨环境)

例如,您将执行以下操作:

declare -A COLORS
COLORS["red"]=$(tput setaf 1)
COLORS["default"]=$(tput setaf 9)
其中:

Value | Color
-------------
0     | Black
1     | Red
2     | Green
3     | Yellow
4     | Blue
5     | Magenta
6     | Cyan
7     | White
8     | Unused
9     | Default
至于您的函数,只要您可以使用相同的颜色打印整行,并且传递给它的字符串本身没有多种颜色,就应该没有问题