在 shell 中突出显示文本

在 shell 中突出显示文本

我一直使用下面的方法来突出显示 shell 中文本的背景。

tput smso;printf " TEXT ";tput rmso;

如何在不使用的情况下实现相同的目标tput(我的意思是某种方式格式化,例如\e[0mprintf 中的颜色)?

答案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 4ANSI 颜色代码(其中 4 为 ANSI 颜色蓝色编号)。

相关内容