如何在Bash中输出粗体文本?

我正在写一个Bash脚本,在屏幕上打印一些文本:

echo "Some Text" 

我可以格式化文本吗? 我想使它大胆。

这种做法最兼容的方法是使用tput发现正确的序列发送到terminal:

 bold=$(tput bold) normal=$(tput sgr0) 

那么你可以使用variables$bold$normal来格式化东西:

 echo "this is ${bold}bold${normal} but this isn't" 

这是大胆的,但这不是

我假设bash运行在一个vt100兼容的terminal上,用户没有明确地closures对格式的支持。

首先,使用-e选项打开对echo特殊字符的支持。 之后,使用ansi转义序列ESC[1m ,如:

 echo -e "\033[1mSome Text" 

更多关于ansi转义序列的例子在这里: ascii-table.com/ansi-escape-sequences-vt-100.php

理论上是这样的:

 # BOLD `$ echo -e "\033[1mThis is a BOLD line\033[0m"` This is a BOLD line # Using tput tput bold echo "This" #BOLD tput sgr0 #Reset text attributes to normal without clear. echo "This" #NORMAL # UNDERLINE $ echo -e "\033[4mThis is a underlined line.\033[0m" This is a underlined line. 

但实际上,它可能会被解释为“高强度”的颜色。

(来源: http : //unstableme.blogspot.com/2008/01/ansi-escape-sequences-for-writing-text.html )

为了在你的string上回显一些样式,使用下面的模板

 echo -e '\033[1mYOUR_STRING\033[0m' 

说明:

  • echo -e – e选项意味着使用转义string
  • 33 – 转义序列表示样式的开始/结束
  • 小写m表示序列的结尾
  • 1粗体属性
  • [0m – 仅用于此会话,会话后删除所有属性的颜色和格式。

有关更多信息,还有更多样式的文本整数 – 0标准样式1粗体2暗淡4下划线5闪烁7反向8隐形