bash - 如何使用 printf 获取颜色和宽度格式

标签 bash printf

我有一个简单的最小宽度格式,使用 printf 像这样

$ printf "[%-15s][%-10s][%-5s][%-10s]\n" "Hello" "World" "Eat" "Cake"
[Hello          ][World     ][Eat  ][Cake      ]

但是当我尝试按照 here 的说明为其添加一些颜色时,最小宽度格式消失

$ GREEN=$(tput setaf 2) && printf "[%-15s][%-10s][%-5s][%-10s]\n" "Hello" "World" "Eat" "${GREEN}Cake"
[Hello          ][World     ][Eat  ][Cake]

显然你在这里看不到它是绿色的,但是你可以看到“Cake”这个词的最小宽度已经消失了。您看不到但正在发生的事情是“蛋糕”一词的字体也发生了变化。

问题:如何更改颜色但保持最小宽度,并且如果可能的话,保持字体相同?

最佳答案

看起来printf函数正在计算转义序列字符,这些字符将颜色设置为输出宽度的一部分。将每种颜色格式所需的字符数添加到宽度说明符应该可以解决该问题。

最小工作示例:

$ GREEN=$(tput setaf 2) && printf "[%-15s][%-10s][%-5s][${GREEN}%-10s]\n" "Hello" "World" "Eat" "Cake"
[Hello          ][World     ][Eat  ][Cake      ]

关于bash - 如何使用 printf 获取颜色和宽度格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67638971/

相关文章:

c - C 编译器如何解析以下 C 语句?

c - 结构体和 fprintf()

bash - 使用 Bash 计算 AIX 中两个日期之间的天数

bash - Kibana错误/usr/local/bin/node:错误的选择:--no-warnings

c printf %lf %d 不同的结果

c++ - RapidXML:无法打印 - 编译时错误

C 中 printf 函数的代码

sql - 从 .import 插入 datetime()

bash - 简单的 tmux bash 脚本不起作用

Linux bash 知道包含库脚本的脚本路径