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


241

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

echo "Some Text"

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

Answers:


427

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

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

那么您可以使用变量$bold$normal设置格式:

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

这是粗体,但不是


2
那真是太漂亮了。如果我理解正确,这与插入转义符相同,但是可以在其他终端(不是VT100)中使用。
JamesRat 2010年

没错-它会根据TERM的值查找适当的代码。
psmears,2010年

2
如果需要在文本下划线,则可以添加一个变量。请注意,反引号已从注释格式中删除。在答案中使用相同的格式。UNDERLINE =tput smul
jayem

3
tput是一个很棒的命令,其中包含许多命令,可用于许多不同的任务。
Drew Noakes 2014年

我正在尝试类似于OP正在执行的操作,但是带有一个motd文件。在该实例中,如何/在何处定义$bold$normal变量?
马特

73

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

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

说明:

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

可能的整数是:

  • 0-普通样式
  • 1-大胆
  • 2-昏暗
  • 3-斜体
  • 4-带下划线
  • 5-闪烁
  • 7-倒车
  • 8-不可见

1
很好的解释。到处寻找功能[0m提供的功能,这很好地解释了这一点
Jeremy,

虽然应该如此\033[0m
杰里米(Jeremy)'18年

1
3-斜体字,至少在
Konsole

一个希望Strikethrough在Ubuntu和其他一些流行平台上得到支持。
黑暗之星

45

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

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

echo -e "\033[1mSome Text"

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


谢谢。我发现了其他一些转义序列列表,但是您链接到的列表非常丰富!
JamesRat 2010年

18
不要忘记在字符串末尾停止粗体格式:echo -e "\033[1mSome Text\033[0m"否则终端的以下几行也将以粗体显示
mems 2014年

该解决方案甚至可以与PHP-CLI一起使用,这是与其他解决方案相比的优势。
David

如果您记不清\033您可以使用,\e例如echo -e "\e[1msome text\e[0m"
Felipe Alvarez

1
八进制转义序列是允许在JS(JavaScript的)
巳笑

14

理论上是这样的:

# 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.