Categories: Shell编程

Bash printf命令

在很多开发语言中都有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
5.0
02
tee命令–将输出到屏幕和文件
BASH命令自动补全
嘻嘻

嘻嘻IT: 笔者是一个工作七八年的程序猿老鸟,从事涉及的技术栈主要包括PHP、Linux、Devops等,喜欢研究新技术,尝试新技术,提升技术自动化和开发效率,致力于write less,do more! 技术每年都会层出不穷,领域划分的越来越细,不可能学习所有的东西,保持对技术的好奇心,理解技术中核心思想,做一个有深度,有思想的开发!

Recent Posts

MySQL覆盖索引详解

在数据库性能优化中,索引是一个…

31分钟 ago

后端程序员必备:SQL优化的20条建议

SQL优化查询对于后端程序员来…

41分钟 ago

如何通过SSH克隆GIT仓库?

在使用git进行版本控制时,克…

1小时 ago

Robots.txt文件详解

Robots.txt是一个位于…

1天 ago

为什么接收不到SMS-Activate的短信?

SMS-Activate是一个…

2天 ago

Linux中你必须知道的5个压缩命令

Linux系统具有丰富的包和解…

3天 ago