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+ 次瀏覽

開啟您的 職業

完成課程以獲得認證

開始
廣告