shell printf命令 格式化輸出語句

2022-08-18 11:12:08 字數 4258 閱讀 7877

printf

先來看乙個簡單的例子:

使用命令

printf 「hello,world\n」,

輸出:hello,world

再使用echo 「hello,world\n」,輸出為

:hello,world\n

案例二:

使用命令

printf "%s\n" hello,world

輸出結果為:hello,world

printf命令的完整語法有兩個部分

:printg format-string [arguments]

第一部分為描述格式規格的字串,

他的嘴尖提供方式是放在引號內的字串常數

.第二部分為引數列表,

例如字串或變數值的列表

,該列表需與格式規格相對應

.printf使用

format

字串控制輸出

.字串裡的純字元都會如實列印

.echo

的轉義序列會被解釋.包括

%與乙個字母的格式指示符

.用來指示相對應的引數字串的格式化

.printf的轉義序列

序列說明

\a警告字元,

通常為ascii

的bel

字元\b

後退\c

抑制(不顯示

)輸出結果中任何結尾的換行字元;而且

,任何留在引數裡的字元

,任何接下來的引數以及任何留在格式字串中的字元

,都被忽略

\f換頁

\n換行

\r回車

\t水平製表符

\v垂直製表符

\\乙個字面上的反斜槓字元

\ddd

表示1到

3位數八進位制的字元

.盡在格式字串中有效

\0ddd

表示1到

3位的八進位制字元

轉義序列只在格式字串中會被特別對待,

也就是說

,出現在引數字串裡的轉義序列不會被解釋

:使用命令:printf "%s\n" "abc\ndef"

輸出結果:abc\ndef

printf格式指示符

%cascii字元

.顯示相對應引數的第乙個字元

%d,%i

十進位制整數

%e浮點格式([-d].precisione [+-dd])

%e浮點格式([-d].precisione [+-dd])

%g%e或

%f轉換

,看哪乙個較短

,則刪除結尾的零

%g%e或

%f轉換

,看哪乙個較短

,則刪除結尾的零

%s字串

%u不帶正負號的十進位制值

%x不帶正負號的十六進製制.使用a

至f表示10至15

%%字面意義的%

%x不帶正負號的十六進製制.使用a

至f表示10至15

精度的含義

轉換精度含義

%d,%i,%o,%u,%x,%x

要列印的最小位數.

當值的位數少於此數字時

,會在前面補零

.預設精度為

1%e,%e

要列印的最小位數.

當值的位數少於此數字時

,會在小數點後面補零

,預設為精度為

6.精度為

0則表示不顯示小數點小數點右邊的位數

%f小數點右邊的位數

%g,%g

有效位數的最大數目

%s要列印字元的最大數目

案例一:

使用命令:printf "%.5d\n" 15

輸出:00015

案例二:

使用命令:printf "%.10s\n" "a very long string"

輸出:a very lon

案例三: 

使用命令:printf "%.2f\n" 123.4567

輸出:123.46

printf的標誌

字元意義

-將字段裡已格式化的值向左對齊

空格(space)

在正值前置乙個空格,

在負值前置乙個負號

+總是在數值之前放置乙個正號或負號,

即便是正值也是

#下列形式選擇其一:%o

有乙個前置的

o;%x與%x

分別前置的0x與

0x.%e,%e與%f

總是在結果中有乙個小數點

;%g與

%g為沒有結尾的零.0

以零填補輸出,

而非空白

.這僅發生在字段寬度大於轉換後的情況.在

c語言裡

,該標誌應用到所有輸出格式

,及時是非數字的值也是一樣.對於

printf

命令而言

,它僅應用到數值格式

案例一:

使用命令:printf "%-20s%-15s%10.2f\n" "shan" "zhang" 35       

輸出:shan                zhang               35.00

分析:%-20s表示乙個左對齊、寬度為

20個字元字串格式,不足

20個字元,右側補充相應數量的空格符。

%-15s表示乙個左對齊、寬度為

15個字元字串格式。

%10.2f表示右對齊、

10個字元長度的浮點數,其中乙個是小數點,小數點後面保留兩位。

案例二:

使用命令:printf "|%10s|\n" hello

輸出:|     hello|

分析:%10s

表示右對齊

,寬度為

10的字串

,如不足是個字串

,左側補充相應數量的空格數

.案例三:

使用命令:printf "|%-10s|\n" hello

輸出:|hello     |

分析:和案例二比較一下

案例四: 

使用命令:printf "%x %#x\n" 15 15

輸出:f 0xf

分析:如果

#標誌和

%x,%x

搭配使用

,在輸出十六進製制數字時

,前面回家

0x或者

0x字首

.使用標誌符的作用主要是為了動態的指定寬度和精度.

綜合案例分析:

字串向左向右對齊案例:

使用命令:printf "|%-10s| |%10s|\n" hello world

輸出|hello     | |     world|

空白標誌案例:

使用命令: printf "|% d| |% d|\n" 15 -15                 

輸出:| 15| |-15|

+標誌案例

:使用命令:printf "|%+d| |%+d|\n" 15 -15  

輸出:|+15| |-15|

#標誌案例

:使用命令:printf "%x || %#x\n" 15 15

輸出:f || 0xf

0標誌案例

:使用命令:printf "%05d\n" 15

輸出:00015

對於轉換指示符%b,%c與%s

而言,相對應的引數都是為字串.否則

,他們會被解釋為

c語言的數字常數

(開頭的

0位八進位制

,以及開頭的0x與

0x為十六進製制

).更進一步說

,如果引數的第乙個字元為單引號或雙引號

,則縣桂英的數值是字串的第二個字元的

ascii值:

命令:printf "%s is %d \n" a "'a"

輸出:a is 97 

當引數多於格式指示符時,

格式指示符會根據需要再利用

.這種做法在引數列表長度未知時時很方便的

,例如來自萬用字元表示式

.如果留在格式字串裡剩下的指示符比引數多時

,如果是數值轉換

,則遺漏的值會被看做是零

,如果是字串轉換

,則被視為空字串

(雖然可以這麼用

,但比較好的方式應該是一一對應關係

,即提供的引數數目和格式字串數目相同

).如果

printf

無法進行格式的轉換

,便返回乙個非零的退出狀態

.

shell printf命令 格式化輸出語句

printf 命令用於格式化輸出,是echo命令的增強版。它是c語言printf 庫函式的乙個有限的變形,並且在語法上有些不同。注意 printf 由 posix 標準所定義,移植性要比 echo 好。如同 echo 命令,printf 命令也可以輸出簡單的字串 printf hello,shell...

shell printf命令 格式化輸出語句

printf 命令用於格式化輸出,是echo命令的增強版。它是c語言printf 庫函式的乙個有限的變形,並且在語法上有些不同。注意 printf 由 posix 標準所定義,移植性要比 echo 好。如同 echo 命令,printf 命令也可以輸出簡單的字串 printf hello,shell...

shell printf命令 格式化輸出語句

printf 命令用於格式化輸出,是echo命令的增強版。它是c語言printf 庫函式的乙個有限的變形,並且在語法上有些不同。注意 printf 由 posix 標準所定義,移植性要比 echo 好。如同 echo 命令,printf 命令也可以輸出簡單的字串 printf hello,shell...