Provided by: manpages-zh_1.6.3.6-1_all bug

NAME

       scan - 使用 sscanf 式樣的轉換指定符分析字串

總覽 SYNOPSIS

       scan string format ?varName varName ...?
_________________________________________________________________

INTRODUCTION

       這個命令用與   ANSI  C  sscanf  過程相同的方式從輸入字串中分析欄位並返回完成的轉換數目的總
       計,如果在任何轉換被完成之前到達了輸入字串的結束則返回   -1。String   給出要被分析的輸入而
       format  指示如何分析它,使用與  sscanf  相同的 % 轉換指定符。每個 varName 給出一個變數的名
       字;在從 string 中檢索出一個欄位的時候,結果被轉換回一個字串並賦值給相應的變數。  如果未指 │
       定  varName  變數,則  scan 在行內(inline)方式下工作,返回的資料將是一個列表而不儲存在變數 │
       中。在行內方式下,如果在任何轉換被完成之前到達了輸入字串的結束則返回,則返回一個空串。

檢索細節 DETAILS ON SCANNING

       Scan 操作一起檢索 stringformat。如果在 format  的下一個字元是一個空字元(blank)或跳格字
       元(tab)則它匹配在  string 中任何數目(包括零個)的白空格字元。 如果它不是一個 % 字元則它必須
       匹配 string 的下一個字元。當在 format 中遇到一個 % 的時候,它指示一個轉換指定符的開始。 一
       個轉換指定符包括  %  和後面的最多四個欄位:  一個 *,它指示丟棄被轉換出的值而不是賦值到變數
       中;一個 XPG3 位置指定符;一個數指示最大的欄位寬度;和一個轉換字元。除了轉換字元之外所有這
       些欄位都是可選的。存在的欄位必須按照上面給出的次序出現。

       當  scanformat 中發現一個轉換指定符的時候,它首先跳過 string 中的所有白空格(除非指定符
       是 [c)。接著它依據轉換指定符轉換下一組輸入字元,並把結果儲存到用給 scan 的下一個引數給
       出的變數中。

       如果  % 跟隨著一個十進位制數和一個 $,比如``%2$d'',則使用的變數不取自下一個順序的引數。而
       是取自用這個數字指定的引數,這裡 1 對應著第一個 varName。如果在 format  中有任何位置指定符
       則所有指定符都必須被指定位置。每個在引數列表上的    varName   必須準確的對應於一個轉換指定
       符,否則生成一個錯誤。在行內方式下,任何位置指定符可以指定最多一次,並且用空串填充空位置指
       定符。

       支援下列轉換字元:

       d         輸入欄位必須是一個十進位制整數。它被讀入並作為一個十進位制字串儲存到變數中。

       o         輸入欄位必須是一個八進位制整數。它被讀入並作為一個八進位制字串儲存到變數中。  If │
                 the value exceeds MAX_INT (017777777777 on platforms using 32-bit integers),  it │
                 will be truncated to a signed integer.  Hence, 037777777777 will appear as -1 on │
                 a 32-bit machine.

       x         輸入欄位必須是一個十六進位制整數。它被讀入並作為一個十六進位制字串儲存到變數中。 │
                 If the value exceeds MAX_INT (0x7FFFFFFF on platforms using 32-bit integers), it │
                 will be truncated to a signed integer.  Hence, 0xFFFFFFFF will appear as -1 on a │
                 32-bit machine.

       u         輸入欄位必須是一個十進位制整數。它被讀入並作為一個無符號十進位制字串儲存到變數
                 中。

       i         輸入欄位必須是一個整數。使用與 expr  中描述的相同方式確定基數(base)(例如,十進位
                 制、八進位制、或十六進位制)。值被作為一個十進位制字串儲存到變數中。

       c         讀入一個單一的字元並把它的二進位制值作為一個十進位制字串儲存到變數中。在這種情況
                 下不跳過初始的白空格,這樣輸入欄位可以是一個白空格字元。這個轉換不同於  ANSI  標
                 準的地方是輸入欄位總是由一個單一欄位組成並且不可以指定欄位寬度。

       s         輸入欄位由到下一個白空格為止的所有字元組成;把這些字元複製到變數中。

       efg
                 輸入欄位必須是一個浮點數,其組成是一個可選的正負號,一個可能有小數點的十進位制數
                 字的字串,和一個可選的指數,它由一個 eE   並跟隨著一個可選的正負號和一個十進
                 位制數字的字串組成。它被讀入並作為一個浮點數儲存到變數中。

       [chars]   輸入欄位由任何數目的在  chars 中的字元組成。把匹配的字串儲存到變數中。如果在方括
                 號之間的第一個字元是] 則它被作為 chars  的一部分來對待而不是這個字元集合的閉合方
                 括號。  如果 chars 包括一個 a-b 形式的序列,則匹配在 ab 之間(包括二者)的任何
                 字元。如果在方括號之間的第一個或最後一個字元是一個 -,則它被作為 chars  的一部分
                 來對待而不是指示一個範圍。

       [^chars]  輸入欄位由任何數目的不在  chars 中的字元組成。把匹配的字串儲存到變數中。如果緊隨
                 在     ^ 後面的字元是一個 ] 則它被作為 chars      的一部分來對待而不是這個字元集
                 合的閉合方括號。  如果chars     包括一個 a-b  形式的序列,則從字元的集合中排除在
                 ab      之間(包括二者)的任何字元。如果在方括號之間的第一個或最後一個字元是一
                 個     -,則它被作為 chars     的一部分來對待而不是指示一個範圍。

       n         不從輸入字串中消耗輸入。而是把到現在為止從輸入字串中檢索到的字元總數儲存到變數
                 中。

       對於一個轉換從輸入中讀的字元數目應該是對特定轉換最大的數目(例如,對 %d  是儘可能多的十進位
       制數字,對於  %o 是儘可能多的八進位制數字,以此類推)。給一個給定轉換的輸入要麼終止於遇到一
       個白空格要麼終止於達到了最大的欄位寬度,只要其中一種情況滿足就終止。如果在轉換指定符中存在
       一個 * 則不賦值變數並且不消耗下一個檢索引數。

與ANSI SSCANF 的區別 DIFFERENCES FROM ANSI SSCANF

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

       [1]    當前不支援 %p 轉換指定符。

       [2]    對於      %c       轉換,把一個單一字元轉換成一個十進位制字串,接著把它賦值給相應的
              varName;對於這個轉換不能指定欄位寬度。

       [3]    忽略 lh、和  L   修飾符;轉換整數值總是如同不存在修飾符,而轉換實數值總是如同存在
              l 修飾符(就是說,對於內部表示使用型別 double)。

       [4]    如果在任何轉換被完成之前到達了輸入字串的結束並且未給出變數,則返回一個空串。        │

參見 SEE ALSO

       format(n), sscanf(3)

關鍵字 KEYWORDS

       conversion specifier, parse, scan

[中文版維護人]

       寒蟬退士

[中文版最新更新]

       2001/11/07

《中國 Linux 論壇 man 手冊頁翻譯計劃》:

       http://cmpp.linuxforum.net

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