在很多开发语言中都有printf函数语法,通常用来打印和格式化输出变量结果,非常好用。其实在bash中也有printf命令,也可以用来格式化输出,学会用这个再也不用为输出而烦恼了,这里来看下printf的用法。
通常,在编写bash脚本时,我们使用echo打印到标准输出。echo是一个简单的命令,但其功能有限能力。到如果对输出的格式有更多的控制,请使用printf指挥部printf命令格式化并打印其参数,类似于C printf函数。
printf是Bash和其他流行shell(如Zsh和Ksh)中内置的shell。还有一个独立的/usr/bin/printf二进制文件,但是shell内置版本优先。我们将介绍printf的Bash内置版本。
基本语法
printf [-v var] format [arguments]
-v 选项告诉printf不要打印输出结果,而是将其赋值给变量。
该格式是一个字符串,可以包含三种不同类型的对象:
printf命令接受任意数量的参数。如果提供的参数多于格式说明符,则重用格式字符串以使用所有参数。如果提供的参数少于格式说明符,则额外的数字格式说明符将设置为零值,而字符串格式说明符将设置为空字符串。
在使用printf命令传递参数时,需要考虑以下几点:
$ printf "Open issues: %s\nClosed issues: %s\n" "34" "65"
在格式字符串或与%b转换说明符相对应的参数中使用时,将解释反斜杠转义字符。以下是最常见的转义字符列表:
转换规范采用以下形式:
%[flags][width][.precision]specifier
类型转换specifier是一个字符,用于指定如何解释相应的参数。该字符是必需的,并且放置在可选字段之后。
以下是显示所有类型转换及其作用的列表:
$ printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100
如果输出的文本宽度小于指定的宽度,则用空格填充。宽度可以指定为非负十进制整数或星号(*)。
printf "%20s %d\n" Mark 305