关于控制台:如何在Bash中输出粗体文本?

How does one output bold text in Bash?

我正在写一个bash脚本,它将一些文本打印到屏幕上:

1
echo"Some Text"

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


最兼容的方法是使用tput发现发送到终端的正确序列:

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

然后您可以使用变量$bold$normal来格式化:

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

给予

this is bold but this isn't


我假设bash运行在与vt100兼容的终端上,在该终端中,用户没有显式地关闭对格式的支持。

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

1
echo -e"\033[1mSome Text"

关于ansi转义序列的更多信息,例如:ascii-table.com/ansi-escape-sequences-vt-100.php


为了在字符串上应用样式,可以使用如下命令:

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

说明:

  • echo-e--e选项意味着将解释转义(反斜杠)字符串
  • 033-转义序列表示样式的开始/结束
  • 小写M-表示序列的结尾
  • 1-粗体属性(见下文了解更多信息)
  • [0M-重置所有属性、颜色、格式等。

可能的整数是:

  • 0-普通样式
  • 1 - Bold
  • 2暗淡
  • 4下划线
  • 5眨眼
  • 7 -反向
  • 8隐形


理论上是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 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)