我从这个问题中提取了一个示例来创建以下示例:
#!/bin/bash
export GREEN='\033[0;32m'
export RED='\033[0;31m'
export NC='\033[0m' # No Color
echo "I ${RED}love${NC} ${GREEN}Stack Overflow${NC}"
Run Code Online (Sandbox Code Playgroud)
如果我提供文件,它会按预期工作。但是,将其作为可执行文件运行会导致将控制代码打印到屏幕上,而不是更改颜色。我想我需要向 bash 发送一些标志以启用颜色,但是什么?
此处不需要 export,确保将正确的转义字符添加到每个变量更简单,而不是进行echo或printf进行替换。
GREEN=$'\e[0;32m'
RED=$'\e[0;31m'
NC=$'\e[0m'
echo "I ${RED}love${NC} ${GREEN}Stack Overflow${NC}"
Run Code Online (Sandbox Code Playgroud)
更好的是,使用tput获取终端的正确序列,而不是假设 ANSI 转义序列。
GREEN=$(tput setaf 2)
RED=$(tput setaf 1)
NC=$(tput sgr0)
Run Code Online (Sandbox Code Playgroud)