尝试使用 ANSI color escapes from a shell script 时, 我完全被卡住了,因为转义序列 (\e
) 被逐字打印到输出中。
#!/bin/sh
GREEN="\e[32m"
RED="\e[31m"
CLEAR="\e[0m"
printf "${GREEN}test passed${CLEAR}\n"
printf "${RED}test failed${CLEAR}\n"
生产
\e[32mtest passed\e[0m
\e[31mtest failed\e[0m
最佳答案
\e
不能被 POSIX sh
识别(正如 honzasp 所提到的),但是 \033
是。
GREEN='\033[32m'
CLEAR='\033[0m'
printf "${GREEN}testpassed${CLEAR}\n"
通常,不在 printf
的第一个参数中扩展参数会更安全(例如,考虑 FOO="hello %s"; printf "$FOO bar\n"baz;
)。但是,这需要您在参数中嵌入一个实际转义字符,而不是 printf
解释为转义字符的字符串。
GREEN=$(printf '\033[32m')
CLEAR=$(printf '\033[0m')
printf '%stest passed%s' "$GREEN" "$CLEAR"
关于bash - ANSI 转义在 `printf` 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29983248/