解析在 bash shell 中设置颜色的文本
Parsing the text that sets colors in a bash shell
有人能给我指点一下网络上的一些文档,这些文档可以解释 bash shell 如何解析以下设置颜色的行,或者从解析器视图中解释以下内容将读取行?
- 我知道32导致显示深绿色
- 34导致显示深蓝色
但是第一个 \033 是做什么用的,32 和 33 之后的 'm' 是做什么用的?
green ="\[3[0;32m\]"
blue="\[3[0;34m\]"
并最终将这些和其他项目导出到 PS1
开始阅读 bash 的最佳位置是 Bash Prompt HOWTO, specifically the section Bash Prompt Escape Sequences.
字符3
(称为esc或escape)后跟左方括号[ 是 7 位字符构成 ECMA-48 控制序列启动器 (CSI) 的方式。 开始一个控制序列,一直持续到最终字符(必须在64-126范围内),在本例中是米。最后一个字符是决定它是什么类型的控制序列的因素之一——这个是 SGR(设置图形再现)。
虽然大多数最终字符都是字母(A-Z 或 a-z),但也有一些不是。 XTerm Control Sequences 列出一些例如:
CSI Pm ` Character Position Absolute [column] (default = [row,1])
(HPA).
CSI Pt; Pl; Pb; Pr $ {
Selective Erase Rectangular Area (DECSERA), VT400 and up.
Pt; Pl; Pb; Pr denotes the rectangle.
CSI Ps ' |
Request Locator Position (DECRQLP).
CSI Pm ' }
Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.
CSI Pm ' ~
Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.
以你为例
green ="\[3[0;32m\]"
拆解:
-
\[
和 \]
告诉 bash 打折包含的字符(不要将它们算作具有宽度的可打印字符)。这是 bash 特有的。如果你使用 zsh,有一个 different way 可以做同样的事情。大多数 shell(例如 ksh
)不提供此功能。
- SGR 序列中的
0
重置 SGR 序列可能已设置的任何属性(例如颜色)。
;
分号将它与下一个参数隔开,后者是一种特定的颜色。
- ECMA-48 定义了 8 种前景色和 8 种背景色(通常被称为 "ANSI colors",虽然已经很久没有相应的 ANSI 标准了)。
有人能给我指点一下网络上的一些文档,这些文档可以解释 bash shell 如何解析以下设置颜色的行,或者从解析器视图中解释以下内容将读取行?
- 我知道32导致显示深绿色
- 34导致显示深蓝色
但是第一个 \033 是做什么用的,32 和 33 之后的 'm' 是做什么用的?
green ="\[3[0;32m\]"
blue="\[3[0;34m\]"
并最终将这些和其他项目导出到 PS1
开始阅读 bash 的最佳位置是 Bash Prompt HOWTO, specifically the section Bash Prompt Escape Sequences.
字符3
(称为esc或escape)后跟左方括号[ 是 7 位字符构成 ECMA-48 控制序列启动器 (CSI) 的方式。 开始一个控制序列,一直持续到最终字符(必须在64-126范围内),在本例中是米。最后一个字符是决定它是什么类型的控制序列的因素之一——这个是 SGR(设置图形再现)。
虽然大多数最终字符都是字母(A-Z 或 a-z),但也有一些不是。 XTerm Control Sequences 列出一些例如:
CSI Pm ` Character Position Absolute [column] (default = [row,1])
(HPA).
CSI Pt; Pl; Pb; Pr $ {
Selective Erase Rectangular Area (DECSERA), VT400 and up.
Pt; Pl; Pb; Pr denotes the rectangle.
CSI Ps ' |
Request Locator Position (DECRQLP).
CSI Pm ' }
Insert Ps Column(s) (default = 1) (DECIC), VT420 and up.
CSI Pm ' ~
Delete Ps Column(s) (default = 1) (DECDC), VT420 and up.
以你为例
green ="\[3[0;32m\]"
拆解:
-
\[
和\]
告诉 bash 打折包含的字符(不要将它们算作具有宽度的可打印字符)。这是 bash 特有的。如果你使用 zsh,有一个 different way 可以做同样的事情。大多数 shell(例如ksh
)不提供此功能。 - SGR 序列中的
0
重置 SGR 序列可能已设置的任何属性(例如颜色)。 ;
分号将它与下一个参数隔开,后者是一种特定的颜色。- ECMA-48 定义了 8 种前景色和 8 种背景色(通常被称为 "ANSI colors",虽然已经很久没有相应的 ANSI 标准了)。