Linux Shell系列教程之(八)Shell printf命令詳解

本文是Linux Shell系列教程的第(八)篇,更多shell教程請看:Linux Shell系列教程html

在上一篇:Linux Shell系列教程之(七)Shell輸出這篇文章中,已經對Shell printf命令有了一個簡略的介紹,本篇給你們詳細介紹下Shell中的printf命令。linux

Shell printf命令

1、Shell printf命令語法

printf  format-string  [arguments...]

format-string爲描述格式規格的字符串,用來描述輸出的排列方式,最好爲此字符串加上引號。此字符串包含按字面顯示的字符以及格式聲明,格式聲明時特殊的佔位符,用來描述如何顯示相應的參數。shell

arguments是與格式聲明相對應的參數列表,例如一系列的字符串或變量值。學習

格式聲明由兩部分組成:百分比符號(%)和指示符。spa

最經常使用的格式指示符有兩個,%s用於字符串,而%d用於十進制整數。code

格式字符串中,通常字符會按字面顯示。轉義序列則像echo那樣,解釋後再輸出成相應的字符。格式聲明以%符號開頭,並以定義的字母集中的一個來結束,用來控制相應參數的輸出。orm

2、Shell printf命令轉義序列

Shell printf命令的轉義序列以下表所示cdn

序列  
\a 警告字符,一般爲ASCII的BEL字符
\b 後退
\c 不顯示輸出結果中任何結尾的換行字符,並且任何留在參數裏的字符、任何接下來的參數以及任何留在格式字符串中的字符都被忽略。
\f 換頁
\n 換行
\r 回車
\t 水平製表符
\v 垂直製表符
\\ 反斜槓字符

3、Shell printf命令格式指示符

Shell printf命令的格式指示符以下表所示htm

符號 說明
%c ASCII字符.顯示相對應參數的第一個字符
%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

 

4、Shell printf命令精度格式指示符

Shell printf命令中精度格式指示符入下表所示blog

符號 含義
%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

5、Shell printf命令一些標識符

Shell printf命令的一些經常使用標識符以下表所示

字符 說明
將字段裏已格式化的值向左對齊
空格 在正值前置一個空格,在負值前置一個負號
+ 老是在數值以前放置一個正號或負號,即使是正值也是
# 下列形式選擇其一:%o有一個前置的o;
%x與%X分別前置的0x與0X;
%e,%E與%f老是在結果中有一個小數點;
%g與%G爲沒有結尾的零。
0 以零填補輸出,而非空白.這僅發生在字段寬度大於轉換後的狀況

使用舉例:

$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前綴.
使用標誌符的做用主要是爲了動態的指定寬度和精度.

6、Shell printf命令的一些綜合示例

下面給你們總結了一些比較綜合的例子,但願可以幫助你們學習Shell printf命令。

字符串向左向右對齊:
$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是一個很是強大的命令,但願你們平時可以多多練習,爭取熟練掌握。

更多Shell教程請看:Linux Shell系列教程


本文由Linux技術達人【 daxue】發表在: Linux大學
本文固定連接: Linux Shell系列教程之(八)Shell printf命令詳解 轉載請保留連接及出處!
相關文章
相關標籤/搜索