Linux bash 带颜色的 printf 格式分配给变量

Linux bash printf format with color assign to variable

我只想通过 printf 命令格式化一个字符串(包括着色)并将结果分配给一个变量。

不赋值给变量就没问题了,但是一旦我把结果赋值给变量并写入结果,格式就没了。

我的例子:

RED=$'3[0;31m'
NC=$'3[0m'

INPUT="AB${RED}CD${NC}EF"

printf -v OUTPUT '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST "
echo $OUTPUT

OUTPUT="$(printf  '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST ")"
echo $OUTPUT

OUTPUT=$(printf  '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST ")
echo $OUTPUT

printf '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST "
echo ""

我找到了几种将结果传递给变量 (-v VARIABLE) 的解决方案,但它会丢失格式。

感谢您的帮助和问候,

豪克

编辑 1:还有一个问题似乎是颜色代码。 printf 计数 AB${RED}CD${NC}EF 为 17 个字符,而不是 6 个。

使用这个 (echo "$VAR" in "") 来保持格式。不同的变量赋值方式没有区别:

printf -v OUTPUT '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST "
# or
OUTPUT=$(printf  '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST ")
echo "$OUTPUT"