format(3tcl)

NAME
format - 按 sprintf 的式樣格式化一個字串

總覽 SYNOPSIS
format formatString ?arg arg ...?

INTRODUCTION

這個命令按與ANSI C sprintf 過程相同的方式生成一個格式化了的字串(在它的實現中使用了 sprintf)。FormatString 指示如何格式化結果，與 sprintf 一樣使用 % 轉換指定符(specifier)，如果有增添的引數，則它們提供要被替換到結果中的值。format 的返回值是格式化了的字串。

格式化細節 DETAILS ON FORMATTING

命令按從左到右的檢索(scan) formatString 的方式操作。除了百分號之外的在格式字串中的每個字元都要新增到結果字串上。如果字元是一個 %則它不被複制到結果字串中。轉而，在 % 後面的字元被作為一個轉換指定符對待。轉換指定符控制把下一個連續的(successive) arg 轉換成一個特定的格式，並把結果新增到結果字串中轉換指定符的位置上。如果在格式字串中有多個轉換指定符，則每一個控制一個增添的引數 arg。format 命令必須給出足夠的 args 來滿足在 formatString 中的所有轉換指定符的需要。

每個轉換指定符可以由六部分組成: 一個 XPG3 位置指定符，一系列標誌(flag)，一個最小欄位寬度，一個精度，一個長度修飾符(modifier)，和一個轉換字元。除了轉換字元之外可以省略這些欄位中的任何一個。存在的欄位必須按上面給出的次序出現。下面的段落依次討論所有這些欄位。

如果 % 跟隨著一個十進位制數值和一個 $, 比如“%2$d”，則要轉換的值不接受下一個順序的引數。轉而，它接受由這個數字指示的引數，這裡 1 對應於第一個 arg。如果因為在指定符中有 * 字元而轉換指定符要求多個引數，則使用連續的引數，開始的引數由這個數值給出。這依從 XPG3 定位指定符約定。如果在 formatString 中有任何定位的指定符則所有指定符必須定位。

一個轉換指定符的第二部分可以按任意次序包含任何下列的標誌字元:

-   指定被轉換的引數在它的欄位中左對齊(數值一般右對齊，如果需要的話，有前導的空格)。

+   指定輸出的數值必須有符號，即使是正數。

space
    指定如果數值的第一個字元不是一個符號則向數值的開始處新增空格。

0   指定應當在數值的左側填充零而不是空格。

#   要求一中替代的輸出形式。對於 o 和 O 轉換它保證第一個數字總是 0。對於 x 或 X 轉換，除了零之外，在結果的開始處(分別)新增 0x 或 0X。對於所有浮點數轉換(e、E、f、g、和 G) 它保證結果總是一個小數點。對於 g 和 G 轉換它指定刪除尾部的零。

一個轉換指定符的第三部分是給出這個轉換的最小欄位寬度的一個數字。它典型的被用來按列表的(tabular)輸出形式排列(line up)各列(column)。如果被轉換的引數包含的字元比這個最小欄位寬度少，則填充它來達到這個最小的欄位寬度。填充通常是在被轉換的引數的左側新增額外的空格，但是可以使用 0和 - 標誌來分別指定在左側填充零或在右側填充空格。如果指定最小欄位寬度為 * 而不是一個數值，則用給 format 命令的下一個引數確定最小欄位寬度；它必須是一個數值字串。

一個轉換指定符的第四部分是一個精度，它由一個點號和隨後的一個數值組成。在不同的轉換中按不同的方式使用這個數值。對於 e、E、和 f 轉換它指定出現在小數點右側的數字的位數。對於 g 和 G 轉換它指定出現的數字的總數，包括在小數點兩側的數字(但是，除非指定了 # 標誌，省略在小數點後面的尾部的零)。對於正數轉換，它指定輸出的最小的數字位數(如果需要的話新增前導的零)。對於 s 轉換它指定輸出的最大的字元數；如果字串比它長則刪除尾部的字元。如果用 * 而不是一個數值來指定精度，則用給 format 命令的下一個引數來確定精度；它必須是一個數值字串。

一個轉換指定符的第五部分是一個長度修飾符，它必須是 h 或 l。如果它是 h 則指定數值值在轉換之前必須被截斷(truncate)成16位值。這個選項很少有用。忽略 l 修飾符。

一個轉換指定符的最後一部分是確定進行那種轉換的一個字母字元。當前支援下列轉換字元:

d   把整數轉換成有符號的十進位制字串。

u   把整數轉換成無符號的十進位制字串。

i   把整數轉換成有符號的十進位制字串；整數可以是十進位制的，八進位制的(有一個前導的 0) 或十六進位制的(有一個前導的 0x)。

o   把整數轉換成無符號八進位制字串。

x or X
    把整數轉換成無符號十六進位制字串，對 x 使用數字“0123456789abcdef”而對 X 使用數字 “0123456789ABCDEF”。

c   把整數轉換成它代表的 Unicode 字元。

s   不轉換，只是插入字元。

f   浮點數轉換成有符號的 xx.yyy 形式的十進位制字串，這裡的 y 的位數由精度確定(預設: 6)。如果精度是 0 則不輸出小數點。

e or e
    把浮點數轉換成 x.yyye&#177;zz 形式的科學記數法，這裡的 y 的位數由精度確定(預設: 6)。如果精度是 0 則不輸出小數點。如果使用 E 式樣則輸出 E 而不是 e。

g or G
    如果指數小於 -4 或大於等於精度，則把富點數按 %e 或 %E 來轉換。否則按 %f 轉換。省略尾部的零和尾部的小數點。

%   不轉換: 只是插入 %。

數值轉換，被轉換的引數必須是一個正數或浮點數字串；format 把引數轉換成二進位制接著依照轉換指定符把它再轉換成一個字串。

與 ANSI SPRINTF 的區別 DIFFERENCES FROM ANSI SPRINTF

除了下列區別之外，format 命令的行為與 ANSI C sprintf 過程相同:

[1] 當前不支援 %p 和 %n 指定符。

[2] 對於 %c 轉換，引數必須是一個十進位制字串，它將被轉換成相應的字元值。

[3] 忽略 l 修飾符；轉換整數值總是有如沒有修飾符存在，而轉換實數值總是有如存在 l 修飾符(例如， 使用型別 double 作為內部表示)。如果指定了 h 修飾符則在轉換前截斷整數值。

參見 SEE ALSO
sprintf(3), string(n)

關鍵字 KEYWORDS
conversion specifier, format, sprintf, string, substitution

[中文版維護人]
寒蟬退士

[中文版最新更新]
2001/08/29

《中國 Linux 論壇 man 手冊頁翻譯計劃》:
http://cmpp.linuxforum.net

跋
本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃：https://github.com/man-pages-zh/manpages-zh