如何在没有“-e”选项或中间变量的情况下“回显”彩色消息?

如何在没有“-e”选项或中间变量的情况下“回显”彩色消息?

我真的很难理解处理时的行为echo(以及其他此类命令)ANSI 转义码打印彩色消息。

我知道我可以使用-e这样的选项:

echo -e "\e[32m FOO \e[0m"

我的消息将成功着色。

另外,我注意到我可以将 的输出分配echo -e给一个变量,然后在新echo命令中重新使用该变量没有-e选项,无论如何这都会起作用。

foo=$(echo -e "\e[32m FOO \e[0m")
echo $foo

echo -e那么,遇到 ANSI 代码时实际发出的“原始字节”是多少?我的foo变量包含什么?我怎样才能将它们直接集成到我的系统中echo "??? FOO ???"而不需要该-e选项?

答案1

初始的“原始输出”echo将包含实际的转义字符(ASCII 代码 27,八进制 033)而不是\e。字符串的其余部分保持原样。这是用转义字符替换字符序列的-e选项(就像用制表符等替换一样)echobash\e\t

要将转义字符直接合并到$foo而不经过echo -e,您必须在字符串中键入实际的转义字符。

在 中,您可以通过按 后按 来bash键入文字转义字符。Ctrl+VEsc

在终端中,这看起来像

foo="^[[32mFOO^[[0m"

其中每个^[由 生成,Ctrl+V后跟Esc.

或者,您可以使用$'...'("C string interpolation" in bash) 来扩展\e

foo=$'\e[32mFOO\e[0m'

相关内容