
本文最先发布在:https://cloud.tencent.com/developer/article/1638884
通常,在写 Bash 脚本的时候,我们使用echo来打印标准输出。echo是一个简单的命令,但是它能力有限。
想要更好地控制输出格式,使用printf命令。
printf命令格式化并且打印它的参数,类似 C 语言 printf()函数。
printf 命令printf 是一个Bash 和其他流行的 shell,例如 Zsh 和 Ksh 等内建的 shell 命令。它有一个独立的二进制包/usr/bin/printf,但是shell 内建的版本优先。我们将会讲解 Bash 内建的printf版本。
printf 命令语法如下:
printf [-v var] format [arguments]-v选项告诉printf不要打印输出,而是将输出赋值给变量。
format是一个字符串,包含三种不同的对象:
这个命令接受无限数量的参数。如果参数比格式中的多,那么format将会重复使用,来匹配所有的参数。如果参数比格式中的少,那么数字格式的参数被设置为0,字符串格式的参数将被设置为了空字符串。
下面是传递参数给printf命令一些需要注意的点:
printf之前,会替换所有的变量,通配符匹配,以及特殊字符。''包裹的每一个字符都会被保留。变量和命令不会被扩展。典型的使用printf的例子如下:
printf "Open issues: %s\nClosed issues: %s\n" "34" "65"输出:
Open issues: 34
Closed issues: 65字符串Open issues: %s\nClosed issues: %s\n是format,而"34"和"65"是参数。字符串格式包含了两个换行符(\n)和两个将被参数替换的格式符(%s)。
转义字符放在格式化字符串或者参数中将会被解释,类似于%b转换符。这里是一些常用的转义字符:
\\ - 显示一个反斜杠符号\b - 显示一个后退字符\n - 显示一个换行符\r - 显示一个回车符\t - 显示一个横向制表符\v - 显示一个竖向制表符一个转换规格如下:
%[flags][width][.precision]specifier每一个转换规格以%开头,包含一个可选的修饰符并且以下面的字符结尾aAbcdeEfgGioqsuxX。
类型转换符是一个用来和参数进行对应的字符。这个字符是必须的,并且在可选的文本域后面。
下面是一个列表,显示各种类型转换符,以及他们的作用:
符号指令是可选修饰符,被用来调整,补0,等等。
下面是通用情况:
- - 左对齐文本。默认情况下,文本是右对齐的。+ - 在数字前面添加+或者-号。默认情况下,仅仅负数前面加上-号。0 - 空白处补0# - 数字格式width指令被放置在任何符号字母的前面,用来指定转换结果的宽度。
如果输出结果宽度小于指定宽度,补充空格。宽度可以被指定为一个非负数或者一个星号(*)
这里是一个例子:
printf "%20s %d\n" Mark 305%20s意思是设置至少20个字母长度。在文本前面放置空白,因为默认输出是右对齐的。想要文本左对齐,使用-符号(%-20s)。
Mark 305当宽度使用星号(*)的时候,字符宽度由后面具体提供的参数决定。
在下面的这个例子中,宽度被设置成10:
printf "%0*d" 10 50是一个标记,意思是补0,而不是补空格。输出文本至少10个字符:
0000000005精度修饰符为.加上一个正数或者星号。
精度有以下作用:
这是一个例子,显示如何将一个浮点数指定为小数点后3位:
printf "%.3f" 1.61803398输出:
1.618当精度被设置为星号(*),那么精度的具体数值由后面的参数决定。
printf "%.*f" 3 1.618033981.618printf命令采用格式和参数的形式,打印一个格式化字符串。
如果你有任何疑问,请通过以下方式联系我们:
微信:

微信群: 加上面的微信,备注微信群
QQ: 3217680847

QQ 群: 82695646

