我一直使用下面的方法来突出显示 shell 中文本的背景。
tput smso;printf " TEXT ";tput rmso;
如何在不使用的情况下实现相同的目标tput
(我的意思是某种方式格式化,例如\e[0m
printf 中的颜色)?
答案1
其转义序列可能是终端特定的。这就是使用tput
. tputs 根据变量的值在数据库中查找正确的转义序列$TERM
。
在我的终端上:
$ tput smso | sed -n l
\033[3m$
$ tput rmso | sed -n l
\033[23m$
所以我可以这样做:
$ printf '\033[3m%s\033[23m\n' "stand out"
但我不确定这是否适用于其他终端。
如果您不想tput
每次都调用,可以运行一次并存储输出:
smso=$(tput smso) rmso=$(tput rmso)
printf '%s\n' "${smso}stand out${rmso}"
请注意,这smso
是“启动模式突出”,它不适用于反向视频,尽管许多终端使用反向视频来使文本突出。如果您想要反转视频,则tput rev
(通过 取消tput sgr0
),如果您想设置背景颜色,请使用tput setab 4
ANSI 颜色代码(其中 4 为 ANSI 颜色蓝色编号)。