Bash Printf - 如何在 Bash 中打印变量


使用 shell 脚本时,在 Bash 中打印变量是一项常见的任务。Bash printf 命令是一个强大的工具,允许您使用高精度和格式化选项来打印变量。在本文中,我们将探讨如何在 Bash 中使用 printf 以各种方式打印变量。

什么是 Bash Printf?

Bash printf 是一个命令行实用程序,用于格式化和在终端上打印文本。它是 Bash 中的一个内置命令,这意味着它可以在每个 Bash shell 会话中使用,无需任何外部依赖项。

printf 命令类似于 echo 命令,但它对输出格式有更强的控制权。使用 printf,您可指定输出的宽度、精度和对齐方式。这使得 printf 成为以特定格式打印变量的实用工具。

打印变量

在 Bash 中打印变量是一项简单的任务。您可以使用 echo 命令在终端上打印变量的值。例如,如果您有一个名为“name”的变量,其中包含值“John”,则可以使用以下命令打印变量的值:

示例

name="John"
echo $name

输出

John

但是,如果您希望对输出格式有更多控制,则可以使用 printf 命令。

使用 Printf 打印变量

使用 printf 打印变量的语法如下 −

printf format-string variable

“格式化字符串”用于指定输出格式。“变量”是你想要打印的变量的名称。我们来看几个示例。

示例 1:打印不带任何格式化的变量

在此示例中,我们将使用 printf 打印一个变量的值,而不使用任何格式化。我们将使用与前一个示例中相同的变量“name”。

name="John"
printf "%s
" $name

输出

John

在此示例中,我们使用了“%s
”作为格式化字符串。“%s”是要替换为变量值的占位符,而“
”是一个换行符,它会在输出后添加一个换行符。

示例 2:打印带格式化选项的变量

在此示例中,我们将使用 printf 打印一个带有格式化选项的变量的值。我们将使用包含浮点值的变量“price”。

price=9.99
printf "The price is $%.2f
" $price

输出

The price is $9.99

在此示例中,我们使用了“$%.2f
”作为格式化字符串。“$”是一个特殊字符,表示该输出应以货币的格式进行格式化。“%.2f”指定应将浮点值舍入到小数点后两位。
”会在输出后添加一个换行符。

示例 3:使用格式化选项打印多个变量

在此示例中,我们将使用 printf 使用格式化选项打印多个变量。我们将使用“name”和“age”变量打印一个句子。

name="John"
age=30
printf "My name is %s and I am %d years old.
" $name $age

输出

My name is John and I am 30 years old.

在此示例中,我们使用了“%s”和“%d”作为“name”和“age”变量的占位符。“%s”是字符串的占位符,“%d”是整数的占位符。
”会在输出后添加一个换行符。

其他示例

我们来看一些使用 Bash printf 打印变量的其他示例 −

示例 4:打印带有前导零的变量

在某些情况下,你可能需要打印一个带有前导零的数字。例如,如果你想以特定格式打印当前的日期和时间。你可以使用格式化字符串“%02d”打印带有前导零的整数。数字“2”指定输出的宽度,“0”指定应添加前导零。

day=1
month=1
year=2023
printf "Today's date is %02d/%02d/%04d
" $day $month $year

输出

Today's date is 01/01/2023

示例 5:将变量打印为二进制或十六进制

你可以使用格式化字符串“%b”将一个整数打印为二进制,或使用“%x”将其打印为十六进制。

number=10
printf "Binary: %b
" $number printf "Hexadecimal: %x
" $number

输出

Binary: 10
Hexadecimal: a

示例 6:将变量打印为百分比

你可以使用格式化字符串“%.2f%%”将一个浮点值打印为带有小数点后两位的百分比。

discount=0.25
printf "Discount: %.2f%%
" $(echo "$discount * 100" | bc -l)

输出

Discount: 25.00%

在此示例中,我们使用 bc 命令通过将折扣值乘以 100 来计算百分比。

Printf 的格式化选项

除了我们已经看到的示例之外,还有许多其他格式化选项可与 printf 一起使用。我们来看一些使用最广泛的选项。

宽度和对齐方式

你可以使用语法“%[width]s”或“%[width]d”指定输出的宽度。例如,如果你想打印一个宽度为 10 个字符的字符串,可以使用格式化字符串“%10s”。如果字符串短于 10 个字符,空格将被添加到左侧以补全宽度。

你还可以使用字符“-”指定输出的对齐方式。例如,如果你想打印一个宽度为 10 个字符、左对齐的字符串,可以使用格式化字符串“%-10s”。

精度

你可以使用语法“%.x”指定浮点值的精度,其中“x”是你想要舍入的小数位数。例如,如果你想将浮点值舍入到小数点后两位,可以使用格式化字符串“%.2f”。

填充

您可以使用语法 \"%0[x]d\" 或 \"%0[x]s\" 向输出添加填充。例如,如果您想打印一个宽度为 5 个字符并填充为零的整数,则可以使用格式字符串 \"%05d\"。零的数量对应输出的宽度。

避免常见的错误

在使用 Bash printf 时,初学者经常会犯一些常见的错误。以下列出了一些需要注意的事项,以避免这些错误 −

忘记格式字符串

最常见的错误是忘记指定格式字符串。如果您不包含格式字符串,则 printf 将不知道如何格式化输出。例如,以下命令将生成一个错误 −

示例

name="John"
printf $name

输出

John

要解决此问题,您需要包含格式字符串 −

示例

name="John"
printf $name

输出

John

使用错误的格式说明符

另一个常见的错误是使用错误的格式说明符来指定变量类型。如果您使用了错误的说明符,则输出可能不正确或会产生错误。例如,如果您使用 \"%d\" 来打印一个字符串变量,则输出将是意外的。

未转义特殊字符

如果您需要在输出中包含特殊字符,例如制表符或换行符,则需要对其进行转义。否则,它们可能会被 shell 解释为命令或其他特殊字符。例如,以下命令不会生成预期的输出 −

示例

printf "Name:\tJohn
"

输出

Name:	John

要解决此问题,您需要转义制表符和换行符 −

示例

printf "Name:\tJohn
"

输出

Name:	John

结束语

在本文中,我们探讨了如何使用 Bash printf 以各种方式打印变量。我们已经了解了如何在没有任何格式的情况下打印变量、在有格式选项的情况下打印变量以及在有格式选项的情况下打印多个变量。我们还研究了一些 printf 最常用的格式选项,例如宽度和对齐、精度和填充。

通过使用 Bash printf,您可以以满足您需求的特定格式打印变量。这使得 printf 成为 shell 脚本和其他命令行任务的有用工具。

更新时间:12-APR-2023

9K+ 次浏览

开启您的 职业

完成课程以获得认证

开始
广告
© . All rights reserved.