Bash printf命令
嘻嘻发布于2021-01-26
浏览在很多开发语言中都有printf函数语法,通常用来打印和格式化输出变量结果,非常好用。其实在bash中也有printf命令,也可以用来格式化输出,学会用这个再也不用为输出而烦恼了,这里来看下printf的用法。
通常,在编写bash脚本时,我们使用echo打印到标准输出。echo是一个简单的命令,但其功能有限能力。到如果对输出的格式有更多的控制,请使用printf指挥部printf命令格式化并打印其参数,类似于C printf函数。
printf命令
printf是Bash和其他流行shell(如Zsh和Ksh)中内置的shell。还有一个独立的/usr/bin/printf二进制文件,但是shell内置版本优先。我们将介绍printf的Bash内置版本。
基本语法
printf [-v var] format [arguments]
-v 选项告诉printf不要打印输出结果,而是将其赋值给变量。
该格式是一个字符串,可以包含三种不同类型的对象:
- 按原样打印到输出的普通字符。
- 反斜杠转义的字符,解释并打印。
- 描述格式的转换规范,并由格式字符串后面的各个参数的值替换。
printf命令接受任意数量的参数。如果提供的参数多于格式说明符,则重用格式字符串以使用所有参数。如果提供的参数少于格式说明符,则额外的数字格式说明符将设置为零值,而字符串格式说明符将设置为空字符串。
在使用printf命令传递参数时,需要考虑以下几点:
- 在将参数传递给printf命令之前,shell将替换所有变量、通配符匹配和特殊字符。
- 当使用单引号时,引号内的每个字符的文字值将被保留。变量和命令将不会被扩展。
- 使用printf的一个典型例子如下:
$ printf "Open issues: %s\nClosed issues: %s\n" "34" "65"
反斜杠转义字符
在格式字符串或与%b转换说明符相对应的参数中使用时,将解释反斜杠转义字符。以下是最常见的转义字符列表:
- \ -显示反斜杠字符。
- \b -显示退格字符。
- \n -显示新行。
- \r -显示回车。
- \t -显示水平标签。
- \v -显示垂直标签。
转换规格
转换规范采用以下形式:
%[flags][width][.precision]specifier
类型转换说明符
类型转换specifier是一个字符,用于指定如何解释相应的参数。该字符是必需的,并且放置在可选字段之后。
以下是显示所有类型转换及其作用的列表:
- %b -在扩展反斜杠转义序列的同时打印参数。
- %q -打印用引号引起来的参数,可用作输入。
- %d,%i-将参数打印为带符号的十进制整数。
- %u -将参数打印为无符号十进制整数。
- %o -将参数打印为无符号八进制整数。
- %x,%X-将参数打印为无符号十六进制整数。%x打印小写字母并%X打印大写字母。
- %e,%E-将参数作为指数形式的浮点数打印。%e打印小写字母并%E打印大写字母。
- %a,%A-以十六进制小数表示形式将参数打印为浮点数。%a打印小写字母并%A打印大写字母。
- %g,%G-以普通或指数表示法将参数打印为浮点数,以更适合给定值和精度的形式为准。%g打印小写字母并%G打印大写字母。
- %c -将参数打印为单个字符。
- %f -将参数打印为浮点数。
- %s -将参数打印为字符串。
- %%-打印文字%符号。
$ printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100
宽度指令
如果输出的文本宽度小于指定的宽度,则用空格填充。宽度可以指定为非负十进制整数或星号(*)。
printf "%20s %d\n" Mark 305