【shell】终端文本的颜色和样式打印
在Shell脚本中,\033[XXm
是 ANSI转义序列,用于控制终端文本的颜色和样式。以下是完整的颜色和样式代码列表:
1. 基本格式
echo -e "\033[CODEm你的文本\033[0m"
\033[
:转义序列开始(\e[
或\x1b[
等效)。CODE
:颜色/样式代码(见下表)。m
:结束代码标记。\033[0m
:重置所有样式(避免影响后续输出)。
2. 颜色代码表
(1)标准前景色(文本颜色)
颜色 | 代码 | 示例 |
---|---|---|
黑色 | 30 | echo -e "\033[30m黑色\033[0m" |
红色 | 31 | echo -e "\033[31m红色\033[0m" |
绿色 | 32 | echo -e "\033[32m绿色\033[0m" |
黄色 | 33 | echo -e "\033[33m黄色\033[0m" |
蓝色 | 34 | echo -e "\033[34m蓝色\033[0m" |
洋红色 | 35 | echo -e "\033[35m洋红\033[0m" |
青色 | 36 | echo -e "\033[36m青色\033[0m" |
白色 | 37 | echo -e "\033[37m白色\033[0m" |
(2)标准背景色
颜色 | 代码 | 示例 |
---|---|---|
黑色背景 | 40 | echo -e "\033[40m黑底\033[0m" |
红色背景 | 41 | echo -e "\033[41m红底\033[0m" |
绿色背景 | 42 | echo -e "\033[42m绿底\033[0m" |
黄色背景 | 43 | echo -e "\033[43m黄底\033[0m" |
蓝色背景 | 44 | echo -e "\033[44m蓝底\033[0m" |
洋红背景 | 45 | echo -e "\033[45m洋红底\033[0m" |
青色背景 | 46 | echo -e "\033[46m青底\033[0m" |
白色背景 | 47 | echo -e "\033[47m白底\033[0m" |
(3)亮色(高亮前景色)
颜色 | 代码 | 示例 |
---|---|---|
亮黑色 | 90 | echo -e "\033[90m灰黑\033[0m" |
亮红色 | 91 | echo -e "\033[91m亮红\033[0m" |
亮绿色 | 92 | echo -e "\033[92m亮绿\033[0m" |
亮黄色 | 93 | echo -e "\033[93m亮黄\033[0m" |
亮蓝色 | 94 | echo -e "\033[94m亮蓝\033[0m" |
亮洋红色 | 95 | echo -e "\033[95m亮洋红\033[0m" |
亮青色 | 96 | echo -e "\033[96m亮青\033[0m" |
亮白色 | 97 | echo -e "\033[97m亮白\033[0m" |
(4)亮色背景
颜色 | 代码 | 示例 |
---|---|---|
亮黑背景 | 100 | echo -e "\033[100m亮黑底\033[0m" |
亮红背景 | 101 | echo -e "\033[101m亮红底\033[0m" |
亮绿背景 | 102 | echo -e "\033[102m亮绿底\033[0m" |
亮黄背景 | 103 | echo -e "\033[103m亮黄底\033[0m" |
亮蓝背景 | 104 | echo -e "\033[104m亮蓝底\033[0m" |
亮洋红背景 | 105 | echo -e "\033[105m亮洋红底\033[0m" |
亮青背景 | 106 | echo -e "\033[106m亮青底\033[0m" |
亮白背景 | 107 | echo -e "\033[107m亮白底\033[0m" |
3. 样式代码
样式 | 代码 | 示例 |
---|---|---|
重置 | 0 | echo -e "\033[0m重置\033[0m" |
加粗 | 1 | echo -e "\033[1m加粗\033[0m" |
暗淡 | 2 | echo -e "\033[2m暗淡\033[0m" |
斜体 | 3 | echo -e "\033[3m斜体\033[0m" |
下划线 | 4 | echo -e "\033[4m下划线\033[0m" |
闪烁 | 5 | echo -e "\033[5m闪烁\033[0m" |
反色 | 7 | echo -e "\033[7m反色\033[0m" |
隐藏 | 8 | echo -e "\033[8m隐藏\033[0m" |
4. 组合使用
可以同时设置多个属性,用分号 ;
分隔:
# 红色 + 加粗 + 绿色背景
echo -e "\033[31;1;42m红字加粗绿底\033[0m"
5. 兼容性说明
- 部分终端可能不支持某些样式(如闪烁
5
或斜体3
)。 - 推荐在脚本中优先使用标准颜色(30-37, 40-47, 90-97, 100-107)。
掌握这些代码后,可以轻松为脚本输出添加彩色和样式!
补充:
在 echo -e "\033[30m黑色\033[0m"
这个命令中,-e
是 echo
命令的一个选项,它的作用是启用转义字符的解释(比如 \033
表示 ASCII 转义字符,用于控制终端颜色)。
具体解释:
\033[30m
表示设置文本颜色为黑色。\033[0m
表示重置所有文本属性(恢复默认颜色)。- 如果没有
-e
,echo
会直接输出\033[30m黑色\033[0m
,而不会解析转义序列,导致终端显示的是原始字符而不是彩色文本。
是否可以去除 -e
?
- 可以去除,但去除后颜色控制会失效,终端会直接显示
\033[30m黑色\033[0m
这样的原始字符串。 - 如果你希望保留颜色效果,就不能去掉
-e
。
替代方案(兼容性更好):
某些系统(如 macOS 的默认 echo
)可能不支持 -e
,这时可以用 printf
代替:
printf "\033[30m黑色\033[0m\n"
(printf
默认支持转义字符,不需要额外选项。)
总结:
-e
是让echo
解析转义字符的关键选项,去掉后颜色控制会失效。- 如果跨平台使用,建议用
printf
替代。