Provided by: manpages-zh_1.5.2-1.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