您知道,由特殊字符序列产生的彩色输出,例如:
echo -e "\e[34m Hello\n \e[0m"
这将产生蓝色的单词“Hello”。为此,我必须在网络上搜索,这很困难,因为不同的来源可能会说不同的内容。我想,一定有一些手册,但我找不到。即使有apropos color
或类似的东西。那么,问题是 - 我在哪里可以找到可靠的手册?
答案1
信息来源太多,无法在此页面列出:
- 该命令
echo -e
使用一个扩大呈现\e
为 ASCII 27(八进制 33 或“\033”)。打印这些用途的便携式方式printf
(POSIX)。与标准比较echo
(POSIX)。 你的例子可以重写为
printf "\033[34m Hello\n \033[0m"
- 颜色逃逸的标准是ECMA-48(编码字符集的控制函数)。
- 在 ECMA-48 中,8.3.117 SGR - 选择图形再现列出了用于设置 8 种前景颜色和 8 种背景颜色的控制序列。
- 它还列出了代码 39/49“默认显示颜色(实现定义)”和 38/48“为未来标准化保留;用于设置 ISO 8613-6 [CCITT 建议 T.416] 中指定的字符前景色”。也就是说,另一个组织提出了建议,但尚未(到目前为止,24 年后)成为标准的一部分。
- 仔细阅读它,您可能会注意到该标准在许多地方都很模糊,允许有不同的解释。它描述了句法这些控制序列,但没有描述它们行为。为此,您必须查看相应终端的文档。
- xterm 的文档位于XTerm 控制序列,假设您熟悉 DEC 文档http://vt100.net
- 对于其他终端,它们的手册页可能会枚举控件(如 Linux 控制台中所做的那样)控制台代码)。
- 其他终端将自己记录为“xterm”;有关讨论,请参阅 xterm 常见问题解答通过计数控件来比较版本。幸运的是,颜色控制是大多兼容(但请参阅 ncurses 常见问题解答我的终端显示一些未着色的空间)。
您还可以阅读手册页
tput
,这允许您使用terminfo
shell 脚本中的功能。你的例子可以重写为printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
一些来源,例如Bash 提示符 HOWTO和高级 Bash 脚本指南提到颜色,但(即使是这些)通常也有差距和遗漏,对于 ECMA-48 没有帮助。
- 您可以通过其他来源(例如引用的来源)等的网络搜索副本找到大多数其他来源,并且通常很少关注实际标准。