日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Linuxprintf命令使用實(shí)例

在編寫shell腳本時(shí),我們使用echo打印到標(biāo)準(zhǔn)輸出。echo是一個(gè)簡(jiǎn)單的命令,但其功能有限,想要更好的控制輸出格式,可以使用printf命令。

成都創(chuàng)新互聯(lián)專注于企業(yè)成都營(yíng)銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、訥河網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)電子商務(wù)商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為訥河等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

printf 簡(jiǎn)史

術(shù)語 printf 代表“格式化打印print formatted”,它可能最早出現(xiàn) Algol 68 編程語言中。自從它被納入到 C 語言后,printf 已經(jīng)在 C++、Java、Bash、PHP 中一次次重新實(shí)現(xiàn),并且很可能在你最喜歡的 “后 C” 語言中再次出現(xiàn)。

顯然,它很受歡迎,但很多人認(rèn)為它的語法很復(fù)雜,尤其是與 echo 或 print 或 cout 等替代的函數(shù)相比尤為明顯。例如,這是在 Bash 中的一個(gè)簡(jiǎn)單的 echo 語句:

$ echo hello
hello
$

這是在 Bash 中使用 printf 得到同樣結(jié)果:

$ printf "%s\n" hello
hello
$

但是所增加的復(fù)雜性反而讓你擁有很多功能,這是為什么 printf 值得學(xué)習(xí)的確切原因。

printf 輸出

在 printf 背后的基本思想是:它能夠基于與內(nèi)容分離的樣式信息來格式化輸出。例如,這里是 printf 認(rèn)可的視作特殊字符的特定序列集合。你喜歡的語言可能會(huì)有或多或少的序列,但是通常包含:

  • \n: 新行
  • \r: 回車換行
  • \t: 水平制表符
  • \NNN: 一個(gè)包含一個(gè)到三個(gè)數(shù)字,使用八進(jìn)制值表示的特殊字節(jié)

例如:

$ printf "\t\123\105\124\110\n"
    SETH
$

在這個(gè) Bash 示例中, printf 渲染一個(gè)制表符后,然后是分配給四個(gè)八進(jìn)制值字符串的 ASCII 字符,并以一個(gè)生成一個(gè)新行(\n)的控制序列結(jié)束。

如果同樣使用 echo 來輸出會(huì)產(chǎn)生更多的字符:

$ printf "\t\123\105\124\110\n"
\t\123\105\124\110\n
$

使用 Python 的 print 函數(shù)來完成同樣的任務(wù),你會(huì)發(fā)現(xiàn) Python 的 print 命令比你想象的要強(qiáng)大:

>>> print("\t\123\n")
       S
>>>

顯然,Python 的 print 包含傳統(tǒng)的 printf 特性以及簡(jiǎn)單的 echo 或 cout 的特性。

不過,這些示例包括的只是文字字符,盡管在某些情況下它們也很有用,但它們可能是 printf 最不重要的部分。printf 的真正的威力在于格式化說明。

使用 printf 格式化輸出

格式化說明符是以一個(gè)百分號(hào)(%)開頭的字符。

常見的格式化說明符包括:

  • %s: 字符串
  • %d: 數(shù)字
  • %f: 浮點(diǎn)數(shù)字
  • %o: 一個(gè)八進(jìn)制的數(shù)字

這些格式化說明符是 printf 語句的占位符,你可以使用一個(gè)在其它地方提供的值來替換你的 printf 語句中的占位符。這些值在哪里提供取決于你使用的語言和它的語法,這里有一個(gè)簡(jiǎn)單的 Java 例子:

string var="hello\n";
system.out.printf("%s", var);

把這個(gè)代碼包裹在適當(dāng)?shù)臉影逦募校趫?zhí)行后,將呈現(xiàn):

$ ./example
hello
$

但是,當(dāng)一個(gè)變量的內(nèi)容更改時(shí),有意思的地方就來了。假設(shè)你想基于不斷增加的數(shù)字來更新輸出:

#include  
int main() {
 int var=0;
 while ( var printf("Processing is %d% finished.\n", var);
 }
 return 0;
}

編譯并運(yùn)行:

Processing is 1% finished.
[...]
Processing is 100% finished.

注意,在代碼中的兩個(gè) % 將被解析為一個(gè)打印出來的 % 符號(hào)。

使用 printf 限制小數(shù)位數(shù)

數(shù)字也可以是很復(fù)雜,printf 提供很多格式化選項(xiàng)。你可以對(duì)浮點(diǎn)數(shù)使用 %f 限制打印出多少個(gè)小數(shù)位。通過把一個(gè)點(diǎn)(.)和一個(gè)限制的數(shù)放置在百分符號(hào)和 f 之間, 你可以告訴 printf 打印多少位小數(shù)。這是一個(gè)簡(jiǎn)單的用 Bash 寫的簡(jiǎn)練示例:

$ printf "%.2f\n" 3.141519
3.14
$

類似的語法也適用于其它的語言。這里是一個(gè) C 語言的示例:

#include  
#include  
int main() {
 fprintf(stdout, "%.2f\n", 4 * atan(1.0));
 return 0;
}

對(duì)于三位小數(shù),使用 .3f ,依次類推。

使用 printf 來在數(shù)字上添加逗號(hào)

因?yàn)槲粩?shù)大的數(shù)字很難解讀,所以通常使用一個(gè)逗號(hào)來斷開大的數(shù)字。你可以在百分號(hào)和 d 之間放置一個(gè)撇號(hào)(‘),讓 printf 根據(jù)需要添加逗號(hào):

$ printf "%'d\n" 1024
1,024
$ printf "%'d\n" 1024601
1,024,601
$

使用 printf 來添加前綴零

printf 的另一個(gè)常用的用法是對(duì)文件名稱中的數(shù)字強(qiáng)制實(shí)行一種特定的格式。例如,如果你在一臺(tái)計(jì)算機(jī)上有 10 個(gè)按順序排列的文件,計(jì)算機(jī)可能會(huì)把 10.jpg 排在 1.jpg 之前,這可能不是你的本意。當(dāng)你以編程的方式寫一個(gè)到文件時(shí),你可以使用 printf 來用前綴為 0 的字符形成文件名稱。這是一個(gè)簡(jiǎn)單的用 Bash 寫的簡(jiǎn)練示例:

$ printf "%03d.jpg\n" {1..10}
001.jpg
002.jpg
[...]
010.jpg

注意:每個(gè)數(shù)字最多使用 3 位數(shù)字。

使用 printf

正如這些 printf 示例所顯示,包括控制字符,尤其是 \n ,可能會(huì)冗長(zhǎng),并且語法相對(duì)復(fù)雜。這就是為什么開發(fā)像 echo 和 cout 之類的快捷方式的原因。不過,如果你時(shí)不時(shí)地使用 printf ,你就會(huì)習(xí)慣于這種語法,并且它也會(huì)變成你的習(xí)慣。我不認(rèn)為 printf 有任何理由成為你在日?;顒?dòng)中打印時(shí)的首選,但是它是一個(gè)很好的工具,當(dāng)你需要它時(shí),它不會(huì)拖累你。

花一些時(shí)間學(xué)習(xí)你所選擇語言中的 printf,并且當(dāng)你需要時(shí)就使用它。它是一個(gè)強(qiáng)有力的工具,你不會(huì)后悔隨時(shí)可用的工具。


本文名稱:Linuxprintf命令使用實(shí)例
轉(zhuǎn)載注明:http://www.dlmjj.cn/article/dpggijj.html