在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Linux/ shell 學習三十四天----printf 詳解
shell 學習四十一天----列出文件 ls 和 od 命令
shell 學習小結(jié)
shell 學習第二十八天----case 語句
shell 學習四十四天----尋找文件
shell 學習三十五天----波浪號展開與通配符
shell 學習三十八天----執(zhí)行順序和 eval
shell 學習四十八天----文件校驗和匹配
shell 學習四十天----awk 的驚人表現(xiàn)
shell 學習第十一天----sed 正則的精確控制
shell 學習第十七天----awk 命令
shell 學習三十九天----內(nèi)建命令
shell 學習四十五天----xargs
shell 學習三十七天----引用
shell 學習第十六天----join 練習
shell 學習第二十四天----提取開頭或結(jié)尾數(shù)行
shell 學習第九天----分組
shell 學習第五天----基本的 I/O 重定向
shell 學習第十五天----使用 cut 選定字段
shell 學習四十六天----文件系統(tǒng)的空間信息 df 和 du 命令
shell 學習第八天----擴展正則表達式 (ERE)
shell 學習第十九天----文本塊排序
shell 學習第二十一天----重新格式化段落
shell 學習三十六天----命令替換
shell 學習第二十天----sort 的其他內(nèi)容以及 uniq 命令
shell 學習四十二天----使用 touch 更新文件時間
shell 學習五十一天----top 命令查看進程列表
shell 學習第一天
shell 學習五十四天----進程系統(tǒng)調(diào)用的追蹤 strace
shell 學習五十天----查看進程 ps 命令
shell 學習第二十七天----退出狀態(tài)和 if 語句
shell 學習第二十三天----打印
shell 學習三十三天----關(guān)于重定向
shell 學習四十九天----進程建立
shell 學習第三十天----break,continue,shift,getopts
shell 學習五十五天----進程記賬
shell 學習總結(jié)一
shell 學習第二十六天----變量與算數(shù)
shell 學習第二十二天----計算行數(shù), 字數(shù)以及字符數(shù)
shell 學習五十八天----/proc 文件系統(tǒng)
shell 學習第二十五天----神器的管道符
shell 學習第三十二天----read 讀取一行
sheel 學習第三天
shell 學習----小結(jié)
shell 學習第十八天----文本排序
shell 學習第三十一天----函數(shù)問題
shell 學習第十天----sed 查找與替換
shell 學習四十三天----臨時性文件的建立與使用
shell 學習四十七天----文件比較 cmp,diff,patch
shell 學習三十四天----printf 詳解
shell 學習五十七天 ----linux 任務管理,針對上一講的總結(jié)和擴展
shell 學習第六天----小結(jié)
shell 學習第十三天----sed 案例分析
shell 學習第七天----基礎正則表達式 (BRE)
shell 學習第十二天----行與字符串
shell 學習小結(jié)四
shell 學習第二十九天----循環(huán)
shell 學習五十二天----刪除進程 kill 命令
shell 學習五十六天----延遲進程調(diào)度
shell 學習第四天----華麗的 printf 輸出
shell 學習第十五天----join 連接字段
shell 學習完結(jié)篇----希望你能看到
shell 學習第二天
shell 學習五十三天----捕獲信號 trap

shell 學習三十四天----printf 詳解

printf

先來看一個簡單的例子: 使用命令 printf "hello,world\n",
輸出:hello,world

再使用 echo "hello,world\n",
輸出為:hello,world\n

案例二: 使用命令 printf "%s\n" hello,world
輸出結(jié)果為:hello,world

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

printg format-string [arguments]

  • 第一部分為描述格式規(guī)格的字符串,他的嘴尖提供方式是放在引號內(nèi)的字符串常熟。
  • 第二部分為參數(shù)列表,例如字符串或變量值的列表,該列表需與格式規(guī)格相對應。 格式字符串結(jié)合要以字面意義輸出的文本,它使用的規(guī)格是描述如何在 printf 命令行上格式化一連串的參數(shù)。一般字符都按照字面上的意義輸出。主義序列會被解釋 (與 ehco 相似),然后輸出為相應的字符。格式指示符是以 % 字符開頭且由已定義的字母集之一作為結(jié)尾,用來控制接下來想對應參數(shù)的輸出。

printf 的語法:printf format [string]

用途:為了從 shell 腳本中產(chǎn)生輸出。由于 printf 的行為是由 POSIX 標準所定義,因此使用 printg 的腳本比使用 echo 更具可移植性。

主要選項:無

行為:printf 使用 format 字符串控制輸出。字符串里的純字符都會如實打印。echo 的轉(zhuǎn)義序列會被解釋。包括 % 與一個字母的格式指示符。用來指示相對應的參數(shù)字符串的格式化。

printf 的轉(zhuǎn)義序列

序列
說明
\a
警告字符,通常為 ASCII 的 BEL 字符
\b
后退
\c
抑制 (不顯示) 輸出結(jié)果中任何結(jié)尾的換行字符;而且,任何留在參數(shù)里的字符,任何接下來的參數(shù)以及任何留在格式字符串中的字符,都被忽略
\f
換頁
\n
換行
\r
回車
\t
水平制表符
\v
垂直制表符
\\
一個字面上的反斜杠字符
\ddd
表示 1 到 3 位數(shù)八進制的字符。盡在格式字符串中有效
\0ddd
表示 1 到 3 位的八進制字符

轉(zhuǎn)義序列只在格式字符串中會被特別對待,也就是說,出現(xiàn)在參數(shù)字符串里的專利序列不會被解釋:

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

輸出結(jié)果:abc\ndef

printf 格式指示符

%c
ASCII 字符。顯示相對應參數(shù)的第一個字符
%d,%i
十進制整數(shù)
%e
浮點格式 ([-d].precisione [+-dd])
%E
浮點格式 ([-d].precisionE [+-dd])
%g
%e 或 %f 轉(zhuǎn)換,看哪一個較短,則刪除結(jié)尾的零
%G
%E 或 %f 轉(zhuǎn)換,看哪一個較短,則刪除結(jié)尾的零
%s
字符串
%u
不帶正負號的十進制值
%x
不帶正負號的十六進制。使用 a 至 f 表示 10 至 15
%%
字面意義的 %
%X
不帶正負號的十六進制。使用 A 至 F 表示 10 至 15

精度的含義

轉(zhuǎn)換
精度含義
%d,%i,%o,%u,%x,%X
要打印的最小位數(shù)。當值的位數(shù)少于此數(shù)字時,會在前面補零。默認精度為 1
%e,%E
要打印的最小位數(shù)。當值的位數(shù)少于此數(shù)字時,會在小數(shù)點后面補零,默認為精度為 6。精度為 0 則表示不顯示小數(shù)點小數(shù)點右邊的位數(shù)
%f
小數(shù)點右邊的位數(shù)
%g,%G
有效位數(shù)的最大數(shù)目
%s
要打印字符的最大數(shù)目

案例一:
使用命令:printf "%.5d\n" 15
輸出:00015

案例二:
使用命令:printf "%.10s\n" "a very long string"
輸出:a very lon

案例三:
使用命令:printf "%.2f\n" 123.4567
輸出:123.46

printf 的標志

字符
意義
-
將字段里已格式化的值向左對齊
空格 (space)
在正值前置一個空格,在負值前置一個負號
+
總是在數(shù)值之前放置一個正號或負號,即便是正值也是
#
下列形式選擇其一:%o 有一個前置的 o;%x 與 %X 分別前置的 0x 與 0X.%e,%E 與 %f 總是在結(jié)果中有一個小數(shù)點;%g 與 %G 為沒有結(jié)尾的零。
0
以零填補輸出,而非空白。這僅發(fā)生在字段寬度大于轉(zhuǎn)換后的情況。在 C 語言里,該標志應用到所有輸出格式,及時是非數(shù)字的值也是一樣。對于 printf 命令而言,它僅應用到數(shù)值格式

案例一:
使用命令:printf "%-20s%-15s%10.2f\n" "Shan" "zhang" 35
輸出:Shan zhang 35.00
分析:

  • %-20s 表示一個左對齊、寬度為 20 個字符字符串格式,不足 20 個字符,右側(cè)補充相應數(shù)量的空格符。
  • %-15s 表示一個左對齊、寬度為 15 個字符字符串格式。
  • %10.2f 表示右對齊、10 個字符長度的浮點數(shù),其中一個是小數(shù)點,小數(shù)點后面保留兩位。

案例二:
使用命令:printf "|%10s|\n" hello
輸出:| hello|
分析:%10s 表示右對齊,寬度為 10 的字符串,如不足是個字符串,左側(cè)補充相應數(shù)量的空格數(shù)。

案例三:
使用命令:printf "|%-10s|\n" hello
輸出:|hello |
分析: 和案例二比較一下

案例四:
使用命令:printf "%x %#x\n" 15 15
輸出:f 0xf
分析:

  • 如果#標志和 %x,%X 搭配使用,在輸出十六進制數(shù)字時,前面回家 0x 或者 0X 前綴。
  • 使用標志符的作用主要是為了動態(tài)的指定寬度和精度。

綜合案例分析:
字符串向左向右對齊案例:
使用命令: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

對于轉(zhuǎn)換指示符 %b%c%s 而言,相對應的參數(shù)都是為字符串。否則,他們會被解釋為 C 語言的數(shù)字常數(shù) (開頭的 0 位八進制,以及開頭的 0x0X 為十六進制)。更進一步說,如果參數(shù)的第一個字符為單引號或雙引號,則縣桂英的數(shù)值是字符串的第二個字符的 ASCII 值:

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

當參數(shù)多于格式指示符時,格式指示符會根據(jù)需要再利用。這種做法在參數(shù)列表長度未知時時很方便的,例如來自通配符表達式。如果留在格式字符串里剩下的指示符比參數(shù)多時,如果是數(shù)值轉(zhuǎn)換,則遺漏的值會被看做是零,如果是字符串轉(zhuǎn)換,則被視為空字符串 (雖然可以這么用,但比較好的方式應該是一一對應關(guān)系,即提供的參數(shù)數(shù)目和格式字符串數(shù)目相同)。如果 printf 無法進行格式的轉(zhuǎn)換,便返回一個非零的退出狀態(tài)。