我正在编写一个 Bash 脚本,将一些文本打印到屏幕上:
echo "Some Text"
我可以设置文本格式吗?我想把它加粗。
最兼容的方法是使用
tput
来发现发送到终端的正确序列:
bold=$(tput bold)
normal=$(tput sgr0)
然后您可以使用变量
$bold
和 $normal
来格式化内容:
echo "this is ${bold}bold${normal} but this isn't"
给予
这是大胆,但这不是
为了在字符串上应用样式,您可以使用如下命令:
echo -e '\033[1mYOUR_STRING\033[0m'
说明:
-e
选项意味着将解释转义(反斜杠)字符串可能的整数是:
所有这些均符合 ANSI,但由绝大多数终端仿真器实现。设置输出样式的另一种方法是通过使用 tput
命令来依赖
terminfo。后者很可能会输出 ANSI 的转义序列,除非您使用的是非常晦涩和/或奇特类型的终端。
我假设 bash 正在 vt100 兼容终端上运行,其中用户没有明确关闭对格式化的支持。
首先,使用
echo
选项打开对 -e
中特殊字符的支持。稍后,使用 ansi 转义序列 ESC[1m
,例如:
echo -e "\033[1mSome Text"
有关 ansi 转义序列的更多信息,例如:ascii-table.com/ansi-escape-sequences-vt-100.php
理论上是这样的:
# 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)