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

来源:http://www.cnblogs.com/waitig/archive/2016/06/08/5569550.html
-Advertisement-
Play Games

本文是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命令

一、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命令詳解
轉載請保留鏈接及出處!
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文轉自:http://blog.sina.com.cn/s/blog_66f845010100qelf.html 一, Transaction control 預設Transaction 由修改數據開始(獲得TX LOCK), 手工也可以用set transaction或DBMS_TRANSACT ...
  • 2016-06-0808:55:33 ---"17:10:13.236"time without time zone:時:分:秒.毫秒---"17:10:13.236+08"time with time zone:時:分:秒.毫秒+時區---"2016-06-02 17:18:25.281"time ...
  • 表空間是資料庫的邏輯組織形式,在一個資料庫中可以創建多個表空間。 表空間的主要作用是將不同用途的數據分離開來,以提高數據的安全性,並提高系統的性能。表空間在資料庫中起著非常重要的作用。 一方面,表空間在邏輯結構上由多個段組成,數據都存儲在表空間的段中,另一方面,表空間在物理結構上對應著多個數據文件, ...
  • 一、增:有4種方法 1.使用insert插入單行數據: 語法:insert [into] <表名> [列名] values <列值> insert into sheet1 values ('000000','000000','0','張三','000000','000000','000000','0 ...
  • 添加數據: 課程表: 添加數據: 成績表: 添加數據: 教師表: 添加數據: ...
  • 由於MySQL的版本不同,所以會有不同的安裝方式。在下以Linux系統下MySQL5.1.19版本為例,進行安裝,初學還望指正。 一、安裝編譯軟體(簡單的yum安裝) gcc gcc-c++ ncurses ncurses-devel cmake 二、修改hosts可以解析主機名 echo "127 ...
  • /* 本文是基於搬瓦工vps的centos-6-x86_64的Linux系統搭建。 需準備的工具:1、putty(用於連接Linux系統) 2、WinSCP(搬瓦工官方提供的ftp上傳下載工具) */ 1、使用WinSCP工具連接Linux進行文件管理 然後將jdk的tar.gz文件和tomcat的 ...
  • 系統鏡像及環境要求: 1) 適用於windows系列版本及開發者的相關教程 請參考本文1.0開始安裝步驟 2) Centos 6系列及Aliyun Linux 6系列以上版本 請參考本文2.0開始安裝步驟 3) Centos 5系列及Aliyun Linux 5系列版本,請參考本文3.0開始安裝步驟 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...