【问题标题】:bash printf formated output with colors [duplicate]带有颜色的bash printf格式化输出[重复]
【发布时间】: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" \ "编号" "一" "二" "三" "四" "五" "六"

标签: bash colors printf


【解决方案1】:

嗯……我想你所做的有点奇怪。看起来您有七个格式字符串要迭代到七个文本块。好的。当我想要脚本中的彩色文本时,我使用了不同的文本着色方法。

const_TextPlain='\e[0m' const_TextYellow='\e[1;33m' printf '%b' "${const_TextYellow}" "${important_message}: " "${const_TextPlain}" '\n'

您希望为您的文本模块包含格式字符串,以防止损坏。所以九个格式字符串而不是七个。我也会看看你帖子的cmets。

【讨论】:

  • 这个例子不适用于我的情况。
  • 肯定会的:const_TextPlain='\e[0m' ; const_TextYellow='\e[1;33m' ; printf "%5s|%-6.5s|%-70.69s|%-9.8s|%7.6s|"${const_TextYellow}"%7.6s"${const_TextPlain}"|%-15.30s\n" \ "Nr. " " One " "Two" "Three" "Four" "Five" " Six".
  • 或者你认为它不会这样工作? printf "%5s|%-6.5s|%-70.69s|%-9.8s|%7.6s|%b%7.6s%b|%-15.30s\n" \ "Nr. " " One " "Two" "Three" "Four" "${const_TextYellow}" "Five" "${const_TextPlain}" " Six" .
  • 这里是红色的:readonly const_TextRed='\e[0;31m'
【解决方案2】:

这行得通:

printf  "%5s|%-6.5s|%-70.69s|%-9.8s|%7.6s|"$(tput setaf 1)"%7.6s"$(tput sgr0)"|%-15.30s\n" \ "Nr. " " One " "Two" "Three" "Four" "Five" " Six"

【讨论】:

    猜你喜欢
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多