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

來源:互聯網
上載者:User

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

本文是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輸出:00015printf "%.10s\n" "a very long string"輸出:a very lonprintf "%.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 || 0XF0標誌:$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命令詳解
轉載請保留連結及出處!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.