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

时间:2010-05-27 20:36:10

标签: bash console formatting echo

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

echo "Some Text"

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

5 个答案:

答案 0 :(得分:366)

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

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

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

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

给出

  

这是粗体,但这不是

答案 1 :(得分:41)

我认为bash在兼容vt100的终端上运行,用户没有明确关闭对格式化的支持。

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

echo -e "\033[1mSome Text"

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

答案 2 :(得分:36)

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

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

说明:

  • echo -e - -e选项表示将解释转义(反向)字符串
  • \ 033 - 转义序列代表样式的开头/结尾
  • 小写m - 表示序列的结束
  • 1 - 粗体属性(详见下文)
  • [0m - 重置所有属性,颜色,格式等

可能的整数是:

  • 0 - 正常风格
  • 1 - 大胆
  • 2 - Dim
  • 4 - 带下划线
  • 5 - 闪烁
  • 7 - 反向
  • 8 - 隐身

答案 3 :(得分:12)

理论上是这样的:

# 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

答案 4 :(得分:0)

这是一个旧帖子,但是无论如何,您也可以利用utf-32获得黑体和斜体字符。甚至还有希腊和数学符号以及罗马字母。