说明
- \033 或 \e :两者是等价的,表示转义字符(ASCII escape character),即键盘左上角的ESC键。033是ESC的八进制ASCII码。注意,在“老式”说法中,转义字符就是仅指八进制ASCII码033表示的字符,无他。像C语言中的反斜线 \ ,都是后来扩充的。[1][2]
- \033[ 或 \e[ :也就是 ESC[ ,是一种称为控制序列引导器(Control Sequence Introducer,CSI)的转义序列。所谓转义序列,本质上就是字符串,但终端不会将这些字符串作为普通的文本来显示,而是作为一种命令来执行。转义序列通常用于控制终端的显示细节(如光标位置、颜色、字体风格等)。CSI是转义序列的一种,特点是以 ESC[ 开头。[3]
- \e[m ( \e[0m 、 \e[00m 、 \033[m 、 \033[0m 、 \033[00m ):在设置命令提示符颜色时,表示“设置颜色的字符串”的结束,注意, \e[m 不是CSI的结束,和CSI没有关系,SCI也没有结束标志。
- \[ 和 \] :表示中间的字符串是非打印字符,如CSI。[4][5]
颜色控制码
传统颜色控制码为 L;F;Bm ,其中, L 取值为0或1(也可以是00或01),其中,0表示普通亮度,1表示高亮; F 表示字体颜色,取值为30-37(即30+X,X取0-7); B 表示背景色,取值为40-47。[5][2]
还有一种8-bit控制码,参考[2]中SGR--8-bit 一节。
另外一种控制码格式参考[6]。
例子
PS1='\[\e[38;5;39m\][\[\e[38;5;208m\]\u\[\e[38;5;160m\]@\[\e[38;5;69m\]\h\[\e[38;5;214m\]:\[\e[38;5;10m\]\w\[\e[38;5;39m\]]\[\e[38;5;11m\]\$ \[\e[0m\]'
参考
[1] 转义字符 - 维基百科,自由的百科全书
[2] Escape character - Wikipedia (重点是 SGR 一节)
[3] ansi escape - What this character sequence "\033[H\033[J" does in C? - Stack Overflow
[4] How to Change / Set up bash custom prompt (PS1) in Linux - nixCraft
[5] 自訂 Linux 的 Bash Shell 命令提示字串 Prompt(一):基本用法 - G. T. Wang
[6] linux系统终端命令提示符设置(PS1)记录 - 散尽浮华 - 博客园