【发布时间】:2019-10-23 09:19:09
【问题描述】:
我有这样的问题。在一个脚本中,我有一个格式化的 printf 字符串。 有些列应该用不同的颜色标记,但如果尝试用颜色标记它会破坏整个格式。
这个不行
printf "%5s|%-6.5s|%-70.69s|%-9.8s|%7.6s|%7.6s|%-15.30s\n" \ "Nr. " " One " "Two" "Three" "Four" ""$(tput setaf 1)"Five"$(tput sgr0)"" " Six"
没有颜色的作品:
printf "%5s|%-6.5s|%-70.69s|%-9.8s|%7.6s|%7.6s|%-15.30s\n" \ "Nr. " " One " "Two" "Three" "Four" "Five" " Six"
有人有解决办法吗?
提前致谢!
【问题讨论】:
-
为什么不在格式中嵌入颜色代码?
-
格式字符串
%7.6s将其裁剪为仅6 个字符;颜色代码通常是 5 个字符(每个),因此您可以获得开始颜色代码和一个可打印内容的字符。按照@oguzismail 的建议将颜色代码放在格式字符串中),或者将它们放在没有长度限制的单独字段中。顺便说一句,您对颜色编码参数的引用也很奇怪。 -
命令
printf由一个格式字符串和一个根据格式打印的参数列表组成。您应该将颜色视为格式字符串的一部分,因此它们应该属于格式字符串。 -
谢谢你,戈登的建议,
-
printf "%5s|%-6.5s|%-70.69s|%-9.8s|%7.6s|"$(tput setaf 1)"%7.6s"$(tput sgr0)" |%-15.30s\n" \ "编号" "一" "二" "三" "四" "五" "六"