You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅重置$(tput bold)格式而不清除其他终端属性?

问题原因

terminfo 规范中确实没有定义与 bold(开启加粗)对应的单独关闭加粗的 capname,这不是你遗漏了查找内容。
早期终端的属性设计里,加粗、淡色(dim)属于字体强度类别下的互斥属性,没有设计单独关闭加粗的控制指令,因此 terminfo 没有对应字段。

可行的解决方案

方案1:使用 SGR 22 转义序列(推荐,兼容绝大多数现代终端)

目前所有主流终端(xterm、GNOME Terminal、Konsole、iTerm2、Windows Terminal 等)都支持 ANSI SGR 22 控制序列,它的作用是仅将字体强度重置为普通级别,不会修改颜色、斜体、下划线等其他已生效的格式。
你可以直接在要结束加粗的位置插入转义序列 \e[22m,示例代码如下:

$(tput setaf 6)
Part of this text can be $(tput bold)bold$(echo -ne '\e[22m') but
the rest of the text still retains its initial color.

如果你不想硬编码转义序列,也可以通过 tput 直接指定 SGR 参数实现:tput sgr 0 0 (部分终端下等效于SGR 22),不过硬编码\e[22m的通用性更强。

方案2:状态跟踪恢复(兼容极端老旧终端)

如果你的使用场景需要兼容不支持 SGR 22 的老旧终端,可以通过维护格式状态栈的方式实现:

  1. 每次插入加粗开启指令前,先解析并记录当前流中所有生效的格式属性(前景色、背景色、斜体、下划线等)
  2. 要关闭加粗时,先执行 $(tput sgr0) 重置所有属性,再把之前记录的所有格式属性重新输出一遍,即可恢复加粗前的格式状态。
    这种方案兼容性最高,但需要你额外开发转义序列解析、状态维护的逻辑,实现成本更高。

内容的提问来源于stack exchange,提问作者oneastok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:09:01