You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Bash脚本运行时输出带颜色的内容?

解决Bash脚本直接执行时ANSI颜色失效的问题

其实你猜的方向有点小偏差——不是Bash需要额外参数,而是你用的echo命令在直接执行脚本时,默认不会解析ANSI转义字符(就是那些\033开头的控制码)。

咱们拆解下问题原因:

  • 当你source脚本时,脚本是在当前Shell进程里运行的,你的当前Shell可能默认配置了让echo解析转义字符(比如开启了shopt -s xpg_echo),所以颜色能正常显示;
  • 但直接执行脚本时,会启动一个全新的Bash子进程,默认情况下Bash的echo不会主动解析转义序列,所以那些\033就直接被当成普通字符串打印出来了。

给你两个靠谱的解决方案:

方案1:给echo加-e参数

修改脚本里的echo命令,加上-e选项,它会告诉Bash的echo去解析转义字符:

#!/bin/bash
export GREEN='\033[0;32m'
export RED='\033[0;31m'
export NC='\033[0m' # No Color
echo -e "I ${RED}love${NC} ${GREEN}Stack Overflow${NC}"

方案2:改用printf(更推荐)

printf对转义字符的解析行为在不同Shell里更一致,兼容性更好,不需要额外参数就能识别\033:

#!/bin/bash
export GREEN='\033[0;32m'
export RED='\033[0;31m'
export NC='\033[0m' # No Color
printf "I ${RED}love${NC} ${GREEN}Stack Overflow${NC}\n"

你可以试试这两种方式,直接执行脚本应该就能正常显示颜色啦。

内容的提问来源于stack exchange,提问作者Elros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:05:46