Bash printf命令

在很多开发语言中都有printf函数语法,通常用来打印和格式化输出变量结果,非常好用。其实在bash中也有printf命令,也可以用来格式化输出,学会用这个再也不用为输出而烦恼了,这里来看下printf的用法。

通常,在编写bash脚本时,我们使用echo打印到标准输出。echo是一个简单的命令,但其功能有限能力。到如果对输出的格式有更多的控制,请使用printf指挥部printf命令格式化并打印其参数,类似于C printf函数。

bash 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
tee命令–将输出到屏幕和文件
BASH命令自动补全
Tags: