biwhite=$(tput bold)$(tput setaf 7)
color_off=$(tput sgr0)
printf "%s$USER%s at %s$HOME%s has path %s$PATH%s" "$biwhite" "$color_off" "$biwhite" "$color_off" "$biwhite" "$color_off"
当我想仅向语句的某些部分添加颜色时,是否有 printf
快捷方式可以避免定义每个 %s
?
输入 "$biwhite""$color_off"
3 次似乎多余。
最佳答案
最好避免将参数扩展放入 printf
的格式字符串中,以防它们也包含百分号。也就是说,参数替换提供了一种解决某些重复性的方法。
w="${biwhite}X${color_off}"
printf "%s at %s has path %s" "${w/X/$USER}" "${w/X/$HOME}" "${w/X/$PATH}"
这并非万无一失,但 X
不太可能出现在 tput
的输出中。您可以选择更长的字符串,但需要输入更多内容。
不过,恐怕向字符串添加颜色代码本质上是很痛苦的。
关于bash - 在 bash 中的 printf %s 替换中有效地重用颜色代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42235069/