在 Linux 命令行中打印最简单的方法是使用 echo 命令。
echo "Value of var is $var"
但是,当您需要打印格式化输出时, echo 命令将不够用。
这是 printf 命令可以帮助您的地方。 这 bash printf 命令的操作类似于 C/ 中的 printf 命令C++ 编程语言.
printf "My brother %s is %d years old.n" Prakash 21
你能猜出输出吗?
第一个论据 %s
需要一个字符串, %d
需要一个十进制整数,就像 C/C++ 一样。 如果您不熟悉 C/C++,请不要担心。
您不需要仅仅为了在 Bash 脚本中使用 printf 命令而学习它。 让我向您展示一些 Bash printf 命令的示例。
使用 Bash printf 命令
让我们先从语法开始。
printf format [arguments]
这里, format
是一个字符串,用于确定后续值的显示方式。
在里面 example printf "My brother %s is %d years old.n" Prakash 21
整个 “My Brother %s is %d years old.n” 是格式,后面是参数 Prakash
和 21
. 这些参数用于替换我将在本文后面解释的格式说明符(%s、%d 等)。
以最简单的形式,printf 可以用作显示字符串的 echo 命令。
printf "Hello Worldn"
注意换行符 n
在末尾? 这 echo 和 printf 命令的区别 是 echo 在末尾自动添加一个换行符,但是对于 printf,您必须显式添加它。
特别注意参数的类型和数量
请记住,格式字符串会尝试应用于所有参数。 这就是为什么你应该特别注意它的原因。
[email protected]:~$ printf "Hello, %s! n" Abhishek Prakash
Hello, Abhishek!
Hello, Prakash!

同样,您还应该注意它在格式字符串中期望的格式说明符类型。

正如你在上面看到的 example,如果它没有找到预期的参数,它会显示默认值,即字符串为 null ,整数为 0 。
printf "Hi %s, your room number is %d. n" Abhishek Prakash 131
bash: printf: Prakash: invalid number
Hi Abhishek, your room number is 0.
Hi 131, your room number is 0.
在这里,需要 Abhishek Prakash
作为第一组参数和 131
作为第二组参数。
当它找到一个字符串(Prakash)而不是一个整数时,它会抱怨,但它会继续显示输出,第二个参数的默认值为 0。
同样,它在第二组参数中将 131 视为字符串,并且由于第二个参数不存在,因此默认为 0。
格式规范字符
有几个格式说明符可供您以所需格式显示输出。 以下是一些最常见的:
特点 | 用法 |
---|---|
%s | 细绳 |
%C | 单个字符 |
%d | 整数 |
%o | 八进制整数 |
%X | 十六进制整数 |
%F | 浮点 |
%b | 带有反斜杠转义字符的字符串 |
%% | 百分号 |
现在您已经熟悉了格式说明符,让我们看一些更多的例子来展示它们的作用。
bash printf 命令示例
我认为您不需要对这些示例中的大多数进行详细解释,因为它们是不言自明的。
[email protected]:~$ printf "The octal value of %d is %on" 30 30
The octal value of 30 is 36
让我们看看使用 %b
正确解释反斜杠转义字符的说明符。
[email protected]:~$ printf "String with backslash: %sn" "HellonWorld!"
String with backslash: HellonWorld!
你看 %s
, 没有什么不同的。 但随着 %b
新行转义字符将被正确解释:
[email protected]:~$ printf "String with backslash: %bn" "HellonWorld!"
String with backslash: Hello
World!
当您使用 %c
,它一次只读取字符。
[email protected]:~$ printf "Character: %cn" a
Character: a
[email protected]:~$ printf "Character: %cn" a b c
Character: a
Character: b
Character: c
[email protected]:~$ printf "Character: %cn" abc
Character: a
使用修饰符以特定样式显示 printf 输出
有一些修饰符可以根据您的喜好更改输出的外观。
# 八进制和十六进制数的修饰符
之前你看到了使用 %o
用于将十进制转换为八进制。 但是,不清楚它是否是八进制数。 您可以使用 #
修饰符以正确格式显示八进制和十六进制数字。
[email protected]:~$ printf "%d is %#o in octal and %#x in hexadecimaln" 30 30 30
30 is 036 in octal and 0x1e in hexadecimal
正整数的空间修饰符
您可以在之间使用空格 %
和 d
在 %d
显示带有前导空格的正整数。 当您有一列正数和负数时,这会有所帮助。 看看哪个看起来更“漂亮”:
[email protected]:~$ printf "%d n%d n%d n" 10 -10 10
10
-10
10
[email protected]:~$ printf "% d n%d n% d n" 10 -10 10
10
-10
10
宽度修饰符
宽度修饰符是一个整数,它指定参数的最小字段宽度。
默认情况下,它是右对齐的:
[email protected]:~$ printf "%10s| %5dn" Age 23
Age| 23
您可以通过添加使其左对齐 -
标记它:
[email protected]:~$ printf "%-10s| %-5dn" Age 23
Age | 23
精密改性剂
您可以使用精度修饰符 (.) 点来指定要显示的最小位数 %d
, %u
, %o
, %x
. 它在值的左侧添加零填充。
[email protected]:~$ printf "Roll Number: %.5dn" 23
Roll Number: 00023
如果对字符串使用精度修饰符,它指定字符串的最大长度。 如果字符串较长,则会在显示中被截断。
[email protected]:~$ printf "Name: %.4sn" Abhishek
Name: Abhi
您可以结合使用宽度和精度修饰符:
[email protected]:~$ printf "Name: %.4sn" Abhishek
Name: Abhi
[email protected]:~$ printf "Name: %10.4sn" Abhishek
Name: Abhi
奖励示例:使用 printf 以表格格式显示输出
让我们通过稍微复杂一点的方式,将您学到的有关 printf 命令的知识用在一些有用的地方 example. 这将展示 printf 命令在 bash 脚本。
让我们使用 printf 命令打印下表 bash:
姓名 | ID | 年龄 | 成绩 |
---|---|---|---|
夏洛克·福尔摩斯 | 0000122 | 23 | 一种 |
占士邦 | 0000007 | 27 | F |
大力神波洛 | 0006811 | 59 | G |
简·马普尔 | 1234567 | 71 | C |
这是我为此任务编写的 shell 脚本。 您的脚本可能会有所不同:
#/bin/bash
seperator=--------------------
seperator=$seperator$seperator
rows="%-15s| %.7d| %3d| %cn"
TableWidth=37
printf "%-15s| %-7s| %.3s| %sn" Name ID Age Grades
printf "%.${TableWidth}sn" "$seperator"
printf "$rows" "Sherlock Holmes" 122 23 A
printf "$rows" "James Bond" 7 27 F
printf "$rows" "Hercules Poirot" 6811 59 G
printf "$rows" "Jane Marple" 1234567 71 C
现在如果我运行这个 bash shell脚本,这是它打印的内容:

使用它是不是很棒 bash printf 命令为您的脚本打印格式精美的输出?
我希望你喜欢这个关于 Linux 中 printf 命令的详细教程。 如果您有任何问题或建议,请告诉我。 并且不要忘记成为 Linux 手册的成员,以获取更多此类信息性 Linux 学习。