如何在终端输出中通过变量名解析另一个变量实现着色
实现终端着色输出的可行方案
方法1:通过eval解析变量与转义序列
修改script.sh,让Shell解析文件中的颜色变量占位符,同时识别颜色转义码:
BLUE="\033[0;34m" RED="\033[0;31m" RESET="\033[0m" # 必须添加,避免后续终端颜色异常 # 读取文件内容并完成变量替换、转义解析 eval "echo -e \"$(cat example.txt)\"$RESET"
方法2:使用envsubst替换环境变量
如果系统安装了gettext包(自带envsubst工具),可以用它批量替换文件中的变量占位符:
BLUE="\033[0;34m" RED="\033[0;31m" RESET="\033[0m" # 导出变量到环境,让envsubst可读取 export BLUE RED # 替换占位符后解析转义码,最后重置颜色 cat example.txt | envsubst | echo -e "$(cat -)$RESET"
方法3:用sed直接替换占位符
无需Shell变量解析,直接用sed把文件中的${BLUE}、${RED}替换为实际颜色码:
BLUE="\033[0;34m" RED="\033[0;31m" RESET="\033[0m" # 全局替换占位符并输出,最后重置颜色 sed -e "s/\${BLUE}/$BLUE/g" -e "s/\${RED}/$RED/g" example.txt && echo -n "$RESET"
关键注意点
所有方案都必须加入RESET颜色码,否则执行脚本后终端会持续保持最后设置的颜色,影响后续操作。
内容的提问来源于stack exchange,提问作者szym
相关产品推荐
相关产品推荐

