如果您已经使用 Bash shell 很长时间了,您可能知道如何在 Linux 终端中使用 echo 命令打印字符串。 然而,printf 命令使打印具有特定格式的文本变得更加容易。
今天我们将学习如何使用 printf 函数来提高我们的 Bash 脚本技能。
什么是 Bash printf 函数?
顾名思义,printf 是一个打印格式化文本字符串的函数。 这意味着您可以编写一个字符串结构(格式),然后用值(参数)填充它。
如果您熟悉 C/C++ 编程语言,您可能已经知道 printf 的工作原理。 Bash shell 中的 Printf 非常相似,但确实有一些细微差别。
如何在 Bash Shell 中使用 printf
printf 的基本语法是:
printf format [argument]
Printf 将打印 格式 实现时的字符串 逃脱 () 和 指令 (%) 通过使用指定的 论据. 请注意以下命令的输出:
$ printf "Hello, %s" world
Hello, world
Printf 拿走了 世界 论点并替换了 %s 用它指定字符串中的字符。
您可能会注意到,在输出之后,Bash 不会为您创建新行。 与 echo 命令不同, printf 不会假定您在打印输出后需要换行。 因此,您需要使用换行符 n 在每种情况下。
要打印字符串然后移动到新行,请键入 printf “你好,世界n”.
Hello, world
重要的是要记住 printf 将尝试为所有参数重用格式。 您可以利用它来发挥自己的优势,但如果您不小心,最终可能会得到如下结果:
$ printf "My name is %s " Jordan Gloor
My name is Jordan My name is Gloor
您还应该知道,如果缺少参数, printf 会将任何指令解释为 0 (对于一个数字)和 空值 (对于字符串)。
$ printf "Hello, %s."
Hello, .
既然您知道了在 Linux 中使用 printf 编写 Bash 脚本的工作原理,那么您就可以开始在命令中使用它了。
Linux Bash printf 示例
Printf 具有许多可以在脚本中使用的格式说明符。 但是今天我们将只介绍该功能的一些常见功能。
1. 用字符串格式化输出
要使用文本字符串格式化输出,请使用 %s 指示。
$ printf "%s is one of the largest online %s." MUO "technology publications"
MUO is one of the largest online technology publications.
2. 用小数格式化输出字符串
要使用整数格式化字符串,可以使用 %d 有符号十进制指令。
$ printf "MUO was founded in %d." 2007
MUO was founded in 2007.
请注意,如果要在输出中使用无符号小数,则必须使用 %u 而是指令。
3. 使用 printf 输出数学函数
使用 printf 命令格式化数学函数很容易。 只需像通常在 Bash 中那样将表达式放在双括号内,然后在参数列表中指定表达式。
$ printf "1 + 1 is %d" $((1+1))
1 + 1 is 2
4.格式化十六进制数
如果需要格式化十六进制数,请使用 %X 对于小写和 %X 为大写。
$ printf %X 1000
3E8C
5. 打印日期和时间
要打印当前日期和时间,可以将 printf 与 日期 命令并传递以下指令。
$ printf "%(%m-%d-%Y %H:%M:%S)T" $(date +%s)
03-26-2021 15:27:57
您可以在上述输出中看到月、日、年、小时、分钟和秒的格式说明符。
6. 使用 Unicode 字符格式化字符串
要使用 printf 打印 Unicode 字符,请使用 u 转义 16 位 Unicode 和 U 对于 32 位 Unicode。
为了 example你可以打印 版权 使用以下命令的符号:
$ printf "u00A9"
©
7. 在输出中添加间距
您可以通过在指令说明符之前定义最小数量的打印字符来格式化字符串。 未使用的字符将用空格填充。
为了 example打字 printf “%s:%5dn” “值 1” 25 “值 2” 120 将输出:
Value 1: 25
Value 2: 120
这 %5d 输出中的格式说明符表示格式化字符串至少包含五个字符。 由于 25 只有两位数字,因此在剩余字符中添加了空格。
如果您传递一个负数作为宽度,该指令将左对齐而不是右对齐。
$ printf "%-10s: %d " "Circles" 25 "Boxes" 120
Circles : 25 Boxes : 120
如果要使宽度可变,可以传递星号而不是数字,printf 将使用它在参数列表中找到的下一个数字。
$ printf "%*s: %d " -10 "Circles" 25 -10 "Boxes" 120
Circles : 25 Boxes : 120
学习 Linux printf 命令
使用 Bash 脚本实用程序带中的 printf 命令,您就可以开始在终端中打印复杂且多变的字符串了。 在开发 Bash 脚本时,确保您在尽可能高效的环境中工作非常重要。 这不仅会提高您的命令行技能,还会总体上增强您的工作流程。