本文是Linux Shell系列教程的第(八)篇,更多shell教程請看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell輸出這篇文章中,已經對Shell printf命令有了一個簡略的介紹,本篇給大家詳細介紹下Shell中的printf命令。 一、Shel ...
本文是Linux Shell系列教程的第(八)篇,更多shell教程請看:Linux Shell系列教程
在上一篇:Linux Shell系列教程之(七)Shell輸出這篇文章中,已經對Shell printf命令有了一個簡略的介紹,本篇給大家詳細介紹下Shell中的printf命令。
一、Shell printf命令語法
printf format-string [arguments...]
format-string為描述格式規格的字元串,用來描述輸出的排列方式,最好為此字元串加上引號。此字元串包含按字面顯示的字元以及格式聲明,格式聲明時特殊的占位符,用來描述如何顯示相應的參數。
arguments是與格式聲明相對應的參數列表,例如一系列的字元串或變數值。
格式聲明由兩部分組成:百分比符號(%)和指示符。
最常用的格式指示符有兩個,%s用於字元串,而%d用於十進位整數。
格式字元串中,一般字元會按字面顯示。轉義序列則像echo那樣,解釋後再輸出成相應的字元。格式聲明以%符號開頭,並以定義的字母集中的一個來結束,用來控制相應參數的輸出。
二、Shell printf命令轉義序列
Shell printf命令的轉義序列如下表所示
序列 | |
\a | 警告字元,通常為ASCII的BEL字元 |
\b | 後退 |
\c | 不顯示輸出結果中任何結尾的換行字元,而且任何留在參數里的字元、任何接下來的參數以及任何留在格式字元串中的字元都被忽略。 |
\f | 換頁 |
\n | 換行 |
\r | 回車 |
\t | 水平製表符 |
\v | 垂直製表符 |
\\ | 反斜杠字元 |
三、Shell printf命令格式指示符
Shell printf命令的格式指示符如下表所示
符號 | 說明 |
%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 |
四、Shell printf命令精度格式指示符
Shell printf命令中精度格式指示符入下表所示
符號 | 含義 |
%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
五、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首碼. 使用標誌符的作用主要是為了動態的指定寬度和精度.
六、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命令詳解
轉載請保留鏈接及出處!