我有一个简单的最小宽度格式,使用 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/