bash - 如何使用 printf 获取颜色和宽度格式
问题描述
我有一个简单的最小宽度格式,使用printf
如下
$ printf "[%-15s][%-10s][%-5s][%-10s]\n" "Hello" "World" "Eat" "Cake"
[Hello ][World ][Eat ][Cake ]
但是当我尝试按照此处的说明为其添加一些颜色时,最小宽度格式就会消失
$ GREEN=$(tput setaf 2) && printf "[%-15s][%-10s][%-5s][%-10s]\n" "Hello" "World" "Eat" "${GREEN}Cake"
[Hello ][World ][Eat ][Cake]
显然你在这里看不到它是绿色的,但是你可以看到“Cake”这个词的最小宽度已经消失了。你看不到,但也正在发生的是,“Cake”这个词的字体也发生了变化。
问题:如何更改颜色但保持最小宽度,如果可能,保持字体相同?
解决方案
看起来该printf
函数正在计算将颜色设置为输出宽度的一部分的转义序列字符。将每种颜色格式所需的字符数添加到宽度说明符应该可以解决问题。
最小的工作示例:
$ GREEN=$(tput setaf 2) && printf "[%-15s][%-10s][%-5s][${GREEN}%-10s]\n" "Hello" "World" "Eat" "Cake"
[Hello ][World ][Eat ][Cake ]
推荐阅读
- spring-boot - 如何在 kubernetes 上的 Spring Boot 应用程序中使用 let's encrypt ssl 密钥
- php - 为什么写时复制不适用于具有引用元素的 PHP 数组?
- reactjs - 错误:使用 Redux connect() 时,路由“HomeScreen”的组件必须是 React 组件
- apache-spark - Spark 作业失败:无法创建本地 tmp 目录
- c++ - 如何在 C++ 中使用频率表计算模式
- linux - Linux shell 脚本中的条件
- python - 如何添加相同键的元组并排序
- jquery - 热门在多个元素上使用 prependTo
- sql - Oracle SQL 将字符串转换为数字,但有例外将文本视为 0
- php - 为什么我在不同的在线编译器上得到不同的输出?