format(3tcl) | Tcl Built-In Commands | format(3tcl) |
format - 按 sprintf 的式樣格式化一個字串
format formatString ?arg arg ...?
這個命令按與ANSI C sprintf 過程相同的方式生成一個格式化了的字串(在它的實現中使用了 sprintf)。FormatString 指示如何格式化結果,與 sprintf 一樣使用 % 轉換指定符(specifier),如果有增添的引數,則它們提供要被替換到結果中的值。format 的返回值是格式化了的字串。
命令按從左到右的檢索(scan) formatString 的方式操作。除了百分號之外的在格式字串中的每個字元都要新增到結果字串上。如果字元是一個 %則它不被複制到結果字串中。轉而,在 % 後面的字元被作為一個轉換指定符對待。轉換指定符控制把下一個連續的(successive) arg 轉換成一個特定的格式,並把結果新增到結果字串中轉換指定符的位置上。如果在格式字串中有多個轉換指定符,則每一個控制一個增添的引數 arg。format 命令必須給出足夠的 args 來滿足在 formatString 中的所有轉換指定符的需要。
每個轉換指定符可以由六部分組成: 一個 XPG3 位置指定符,一系列標誌(flag),一個最小欄位寬度,一個精度,一個長度修飾符(modifier),和一個轉換字元。除了轉換字元之外可以省略這些欄位中的任何一個。存在的欄位必須按上面給出的次序出現。下面的段落依次討論所有這些欄位。
如果 % 跟隨著一個十進位制數值和一個 $, 比如“%2$d”,則要轉換的值不接受下一個順序的引數。轉而,它接受由這個數字指示的引數,這裡 1 對應於第一個 arg。如果因為在指定符中有 * 字元而轉換指定符要求多個引數,則使用連續的引數,開始的引數由這個數值給出。這依從 XPG3 定位指定符約定。如果在 formatString 中有任何定位的指定符則所有指定符必須定位。
一個轉換指定符的第二部分可以按任意次序包含任何下列的標誌字元:
一個轉換指定符的第三部分是給出這個轉換的最小欄位寬度的一個數字。它典型的被用來按列表的(tabular)輸出形式排列(line up)各列(column)。如果被轉換的引數包含的字元比這個最小欄位寬度少,則填充它來達到這個最小的欄位寬度。填充通常是在被轉換的引數的左側新增額外的空格,但是可以使用 0和 - 標誌來分別指定在左側填充零或在右側填充空格。如果指定最小欄位寬度為 * 而不是一個數值,則用給 format 命令的下一個引數確定最小欄位寬度;它必須是一個數值字串。
一個轉換指定符的第四部分是一個精度,它由一個點號和隨後的一個數值組成。在不同的轉換中按不同的方式使用這個數值。對於 e、E、和 f 轉換它指定出現在小數點右側的數字的位數。對於 g 和 G 轉換它指定出現的數字的總數,包括在小數點兩側的數字(但是,除非指定了 # 標誌,省略在小數點後面的尾部的零)。對於正數轉換,它指定輸出的最小的數字位數(如果需要的話新增前導的零)。對於 s 轉換它指定輸出的最大的字元數;如果字串比它長則刪除尾部的字元。如果用 * 而不是一個數值來指定精度,則用給 format 命令的下一個引數來確定精度;它必須是一個數值字串。
一個轉換指定符的第五部分是一個長度修飾符,它必須是 h 或 l。如果它是 h 則指定數值值在轉換之前必須被截斷(truncate)成16位值。這個選項很少有用。忽略 l 修飾符。
一個轉換指定符的最後一部分是確定進行那種轉換的一個字母字元。當前支援下列轉換字元:
數值轉換,被轉換的引數必須是一個正數或浮點數字符串;format 把引數轉換成二進位制接著依照轉換指定符把它再轉換成一個字串。
除了下列區別之外,format 命令的行為與 ANSI C sprintf 過程相同:
sprintf(3), string(n)
conversion specifier, format, sprintf, string, substitution
寒蟬退士
2001/08/29
http://cmpp.linuxforum.net
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
8.1 | Tcl |