在Linux命令行中最简单的打印方法是使用echo命令。

linuxmi@linuxmi:~/www.linuxmi.com$ echo “Value of var is $var”

但是,当您需要打印格式化的输出时,echo命令是不够的。

这是printf命令可为您提供帮助的地方。bash printf命令的操作类似于C/C ++编程语言中的printf命令。

linuxmi@linuxmi:~/www.linuxmi.com$ printf “我的兄弟 %s 今年 %d 岁.\n” 当年的大师兄 28

你能猜出输出吗?

与C/C++一样,第一个参数%s需要一个字符串,%d需要一个十进制整数。 如果您不熟悉C/C ++,也不要担心。

您不需要仅仅为了在Bash脚本中使用printf命令而学习它。让我向您展示一些Bash printf命令的示例。

使用Bash printf命令

让我们先从语法开始。

printf format [arguments]

这里,format是一个字符串,它决定了如何显示后续的值。

在示例 printf “我的兄弟 %s 今年 %d 岁.\n” 当年的大师兄 28 中。“我的兄弟 %s 今年 %d 岁.\n”是format,后面跟着参数当年的大师兄28。这些参数用于替换格式说明符(%s、%d等),我将在本文后面对此进行解释。

以最简单的形式,printf可以用作显示字符串的echo命令。

linuxmi@linuxmi:~/www.linuxmi.com$ printf “Hello World www.linuxmi.com Linux迷 \n”

注意末尾的换行符\n吗? echo和printf命令之间的区别在于,echo会在末尾自动添加一个新行字符,但对于printf,则必须显式添加它。

特别注意参数的类型和数量

请记住,格式字符串会尝试应用于所有参数。 这就是为什么您应该特别注意它的原因。

linuxmi@linuxmi:~/www.linuxmi.com$ printf “Hello, %s! \n” www.linuxmi.com Linux迷
Hello, www.linuxmi.com!
Hello, Linux迷!

同样,您还应该注意格式字符串中需要的格式说明符类型。

如上例所示,如果找不到预期的参数,它将显示默认值,字符串为null,整数为0。

linuxmi@linuxmi:~/www.linuxmi.com$ printf “你好 %s, 我们的网址为 %d. \n” Linux迷 www.linuxmi.com 628
bash: printf: www.linuxmi.com: 无效数字
你好 Linux迷, 我们的网址为 0.
你好 628, 我们的网址为 0.

这里,它将Linux迷 www.linuxmi.com作为第一组参数,将628作为第二组参数。

当它找到一个字符串(www.linuxmi.com)而不是整数时,它会报错,但它会继续以默认值0显示第二个参数的输出。

类似地,它将628作为第二组参数中的字符串,由于第二个参数不存在,它默认为0。

format的格式说明字符

有几种格式说明符可用于以所需格式显示输出。以下是一些最常见的方法:

字符 用法
%s 字符串
%c 单个字符
%d 整数
%o 八进制整数
%x 十六进制整数
%f 浮点数
%b 带反斜杠转义符的字符串
%% 百分号

现在您已经熟悉了格式说明符,下面让我们看一些更多的示例来说明它们的实际作用。

Bash printf命令示例

我认为您不需要为大多数示例进行详细说明,因为它们是不言自明的。

linuxmi@linuxmi:~/www.linuxmi.com$ printf “%d 的八进制值是 %o\n” 30 30
30 的八进制值是 36

让我们看看如何使用%b说明符来正确解释反斜杠转义字符。

linuxmi@linuxmi:~/www.linuxmi.com$ printf “带反斜杠的字符串: %s\n” “Hello\nWorld!”

您看到的是%s,这没有什么区别。 但是使用%b可以正确解释新的换行符:

linuxmi@linuxmi:~/www.linuxmi.com$ printf “字符串与反斜杠: %b\n” “Hello\nWorld!”

使用%c时,它一次只能读取一个字符。

linuxmi@linuxmi:~/www.linuxmi.com$ printf “Character: %c\n” a
Character: a
linuxmi@linuxmi:~/www.linuxmi.com$ printf “Character: %c\n” a b c
Character: a
Character: b
Character: c
linuxmi@linuxmi:~/www.linuxmi.com$ printf “Character: %c\n” abc
Character: a

正整数的空间修饰符

您可以在%d中使用%和d之间的空格来显示带前导空格的正整数。 当您有一列正数和负数时,这会有所帮助。 看看哪个看起来更“漂亮”:

linuxmi@linuxmi:~/www.linuxmi.com$ printf “%d \n%d \n%d \n” 70 -70 70
linuxmi@linuxmi:~/www.linuxmi.com$ printf “% d \n%d \n% d \n” 70 -70 70

宽度修改符

宽度修饰符是一个整数,它指定参数的最小字段宽度。

默认情况下,它是右对齐的:

linuxmi@linuxmi:~/www.linuxmi.com$ printf “%10s| %5d\n” 12月 25

您可以通过添加-标志使其左对齐:

linuxmi@linuxmi:~/www.linuxmi.com$ printf “%-10s| %-5d\n” 12月 25

精度修饰符

您可以使用精度修饰符(.) 点来来指定要用%d, %u, %o, %x显示的最小数字数目。它将在值的左侧添加零填充。

linuxmi@linuxmi:~/www.linuxmi.com$ printf “Roll Number: %.5d\n” 628
Roll Number: 00628

如果对字符串使用精度修饰符,则它指定字符串的最大长度。如果字符串较长,则会在显示中被截断。

linuxmi@linuxmi:~/www.linuxmi.com$ printf “Name: %.5s\n” LinuxMi
Name: Linux

您可以结合使用宽度和精度修饰符:

linuxmi@linuxmi:~/www.linuxmi.com$ printf “Name: %.5s\n” LinuxMi
Name: Linux
linuxmi@linuxmi:~/www.linuxmi.com$ printf “Name: %10.5s\n” LinuxMi
Name: Linux

再来一个额外的示例:用printf显示表格格式的输出

让我们在一个稍微复杂一些的示例中充分利用您了解的关于printf命令的知识。这将展示bash脚本中printf命令的真正潜力。

让我们使用printf命令使用bash打印以下表:

Linux ID Order Sorting
Ubuntu 0000100 99 A
CentOS 0000101 77 F
openSUSE 0000102 88 G
Red Hat 0000103 66 C

下面是我为这个任务编写的shell脚本。你的脚本可能会有所不同:

#/bin/bash
linuxmi=——————–
linuxmi=$linuxmi$linuxmi
rows=”%-16s| %.7d| %3d| %c\n”
TableWidth=38

printf “%-15s| %-7s| %.3s| %s\n” Linux ID Order Sorting
printf “%.${TableWidth}s\n” “$linuxmi”
printf “$rows” “Ubuntu” 100 99 U
printf “$rows” “CentOS” 101 77 C
printf “$rows” “openSUSE” 102 88 O
printf “$rows” “Red Hat” 103 66 R

现在,如果我运行此bash shell脚本,将显示以下内容:

使用bash printf命令为脚本打印格式精美的输出不香吗?

我希望您喜欢Linux上有关printf命令的详细教程。 如果您有任何问题或建议,请告诉我。

发表评论