前言
终端作为交互式工具,用户可以通过它与shell环境进行交互。在终端中打印文本是绝大多数shell脚本和工具日常需要进行的基本任务。能够执行打印的方法有很多,格式也各有不同。
一、打印命令echo
echo是用于终端打印的基本命令;在默认情况下,echo在每次调用后会添加一个换行符。
可以使用 双引号"" 单引号’’ 或者不加,都能完成任务,例如:
echo "nihao"
echo 'nihao'
echo nihao
但是如果你希望打印特殊字符,那就不要将其放入双引号中,或者你可以在其之前加上一个特殊的转义字符(\)将!转义。当在echo中使用带双引号的文本时,你应该在echo之前使用set +H,以便能够正常地显示!。
每种方法的副作用如下:
- 使用不带引号的echo时,你没法在所要显示的文本中使用分号(;),因为分号(;)在bash shell中被用作命令定界符。
以echo hello;hello为例,echo hello被视为一个命令,第二个hello则被视为另一个命令。- 使用带单引号的echo时,Bash不会对单引号中的变量(如$var)求值,而只是照原样显示。
这就意味着:$ echo '$var’将会返回$var,而$ echo $var将会根据变量$var定义与否,返回$var的值,或者什么都不返回。
1、在echo中转义换行符
在默认情况下,echo会将一个换行符追加到输出文本的尾部。可以使用标志-n来忽略结尾的换行符。
echo同样接受双引号字符串内的转义序列作为参数。如果需要使用转义序列,则采用echo -e"包含转义序列的字符串"这种形式。
echo -e "1\t2\t3"
1 2 3
2、打印颜色输出
在终端中生成彩色输出相当好玩,我们可以使用转义序列来实现。
要打印彩色文本,可输入如下命令:
# 改变字符串颜色
echo -e "\e[1;31m This is red text \e[0m"
# 改变字符串背景颜色
echo -e "\e[1;41m This is red text \e[0m"
获得结果:
\e[1;31 将颜色设为红色,\e[0m 将颜色重新置回。
设置字符串颜色:重置=0,黑色=30,红色=31,绿色=32,黄色=33,蓝色=34洋红=35,青色=36,白色=37。
设置彩色背景:重置=0,黑色=40,红色=41,绿色=42,黄色=43,蓝=44,洋红=45,青色=46,白色=47。
二、打印命令printf
另一个可用于终端打印的命令是printf。printf使用的参数和C语言中的printf函数一样。例如:
printf "Hello world"
printf使用引用文本或由空格分隔的参数。我们可以在printf中使用格式化字符串。我们还可以指定字符串的宽度、左右对齐方式等。在默认情况下,printf并不像echo命令一样会自动添加换行符,我们必须在需要的时候手动添加
shell脚本如下:
#!/bin/bash
printf "%-5s %-10s %-4s\n" No Name Mark
printf "%-5s %-10s %-4.2f\n" 1 LZC 80.3456
获得结果如下:
No Name Mark
1 LZC 80.35
%s、%c、%d和%f都是格式替代符,其所对应的参数可以置于带引号的格式字符串之后,与C语言的格式处理大同小异。%-5s指明了一个格式为左对齐且宽度为5的字符串替代(-表示左对齐)。如果不用-指定对齐方式,字符串则采用右对齐形式。对于Mark字段,我们将其格式化为%-4.2f,其中.2指定保留2个小数位
注意,在每行格式字符串后都有一个换行符\n。
本文详细介绍了在终端中使用echo和printf命令进行文本打印,包括转义换行符、颜色输出以及printf的格式化功能。特别强调了echo中字符串处理的特性与printf的类似之处。

8552

被折叠的 条评论
为什么被折叠?



