【问题标题】:How does one output bold text in Bash?如何在 Bash 中输出粗体文本?
【发布时间】:2011-02-24 20:46:03
【问题描述】:

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

echo "Some Text"

我可以格式化文本吗?我想把它加粗。

【问题讨论】:

    标签: bash console formatting echo


    【解决方案1】:

    这是一篇旧文章,但无论如何,您还可以通过利用 utf-32 获得粗体和斜体字符。甚至还有可以使用的希腊语和数学符号以及罗马字母表。

    【讨论】:

    • 怎么样?您的意思是为特定字符串选择不同的字形吗?
    【解决方案2】:

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

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

    解释:

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

    可能的整数是:

    • 0 - 普通样式
    • 1 - 粗体
    • 2 - 暗淡
    • 3 - 斜体
    • 4 - 下划线
    • 5 - 闪烁
    • 7 - 反向
    • 8 - 隐形

    【讨论】:

    • 很好的解释。正在寻找 [0m 提供的功能,这很好地解释了它
    • 虽然应该是\033[0m
    • 3 - 斜体,至少在 konsole 中
    • 希望 Ubuntu 和其他一些流行平台支持删除线。
    • @WoodrowShigeru man terminfo
    【解决方案3】:

    理论上是这样的:

    # 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】:

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

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

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

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

      给予

      这是粗体,但这不是

      【讨论】:

      • 这很漂亮。如果我理解正确,这与插入转义符相同,但它可以在其他终端(不是 VT100)中工作。
      • 如果你需要给文本加下划线,你可以添加一个变量。请注意,反引号已从评论格式中删除。在答案中使用相同的格式。 UNDERLINE=tput smul
      • tput 是一个很棒的命令,lots of commands 用于许多不同的任务。
      • 这个 tput 命令比转义字符好很多。您不需要带有 echo 的“-e”,它可以与读取的命令一起使用:read -p "this is ${bold}bold${normal} but this isn't"
      • @DamonHill:啊,好吧——仔细看,不是$(bold),而是${bold},即大括号而不是圆括号:)
      【解决方案5】:

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

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

      echo -e "\033[1mSome Text"
      

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

      【讨论】:

      • 谢谢。我发现了一些其他的转义序列列表,但是你链接的那个非常广泛!
      • 不要忘记在字符串末尾停止粗体格式:echo -e "\033[1mSome Text\033[0m" 否则终端的以下行也将是粗体
      • 这个解决方案甚至可以使用 PHP-CLI,这是相对于其他解决方案的优势。
      • 如果你记不住\033,你可以使用\e,比如echo -e "\e[1msome text\e[0m"
      • JS (JavaScript) 中允许使用八进制转义序列
      猜你喜欢
      • 1970-01-01
      • 2020-10-09
      • 2016-01-28
      • 1970-01-01
      • 2014-09-04
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多