bash - 在 bash 中的 printf %s 替换中有效地重用颜色代码

标签 bash printf

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/

相关文章:

PHP exec() 没有从 bash 命令获取输出

bash:/usr/local/sphinx/bin/search:没有这样的文件或目录

c - 如何在c中将输出数字(或文本)向右对齐?

c++ - 是否有与 register_printf_function 等效的 Microsoft Visual C++?

linux - 如何正确处理 bash shell 脚本中的通配符扩展?

bash - 如何使用 sed 删除特定字符后面的数字?

linux - 在 bash 脚本中编码字符串的 URL

c - 奇怪的 C fprintf 格式符号

c - 我可以读到文件中有 *are* 个字符,但不能将它们打印到另一个文件

java - 为什么我的格式这么奇怪?