如何在 Bash 中输出粗体文本?
Posted
技术标签:
【中文标题】如何在 Bash 中输出粗体文本?【英文标题】:How does one output bold text in Bash? 【发布时间】:2011-02-24 20:46:03 【问题描述】:我正在编写一个在屏幕上打印一些文本的 Bash 脚本:
echo "Some Text"
我可以格式化文本吗?我想把它加粗。
【问题讨论】:
【参考方案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 $boldbold$normal but this isn't"
给予
这是粗体,但这不是
【讨论】:
这很漂亮。如果我理解正确,这与插入转义符相同,但它可以在其他终端(不是 VT100)中工作。 如果你需要给文本加下划线,你可以添加一个变量。请注意,反引号已从评论格式中删除。在答案中使用相同的格式。 UNDERLINE=tput smul
tput
是一个很棒的命令,lots of commands 用于许多不同的任务。
这个 tput 命令比转义字符好很多。您不需要带有 echo 的“-e”,它可以与读取的命令一起使用:read -p "this is $boldbold$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) 中允许使用八进制转义序列以上是关于如何在 Bash 中输出粗体文本?的主要内容,如果未能解决你的问题,请参考以下文章