手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

getopt(1)

名称

getopt - 解析命令选项

用法概要

set -– ` getopt optstring $ * `

描述

getopts 命令取代了 getopt。有关更多信息,请参见下文的“附注”部分。

getopt 可用于打断命令行中的选项以便于 shell 过程进行简单解析,还可用于检查合法选项。optstring 是一串可识别的选项字母;请参见 getopt(3C)。如果某个字母后面跟有冒号 (:),则该选项需要有一个参数,可以使用空格将其与该参数隔开,也可以不使用。特殊选项 用来限定选项的结尾。如果显式使用了该选项,则 getopt 会识别出该选项;否则,getopt 将生成该特殊选项;在任一情况下,getopt 都会将其放置在选项的结尾。shell 的位置参数 ($1 $2 . . . ) 已重置,以便每个选项以 开头并位于自己的位置参数中;还会将每个选项参数解析到其自己的位置参数中。

示例

示例 1 为命令处理参数

以下代码片段显示了如何为可以接受选项 –a–b,以及选项 –o(该选项需要一个参数)的命令处理参数:

set -- `getopt abo: $*`
if [ $? != 0 ]
then
           echo $USAGE
           exit 2
fi
for i in $*
do
           case $i in
           -a | -b)     FLAG=$i; shift;;
           -o)           OARG=$2; shift 2;;
           --)           shift; break;;
           esac
done

此代码将下列各个输入视为等效的:

cmd -aoarg filename1 filename2
cmd -a -o arg filename1 filename2
cmd -oarg -a filename1 filename2
cmd -a -oarg -- filename1 filename2

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os
CSI
enabled(已启用)

另请参见

Intro(1)getopts(1)getoptcvt(1)sh(1)shell_builtins(1)getopt(3C)attributes(5)

诊断

如果 getopt 遇到不包括在 optstring 中的选项字母,将会在标准错误上输出一条错误消息。

附注

在下一个主要发行版中将不支持 getopt。对于本发行版,提供了一个转换工具,即 getoptcvt。有关更多信息,请参见 getopts(1)getoptcvt(1)

重新扫描选项时,请将 optind 重置为 1

getopt 不支持命令语法标准的规则 8 的部分内容(请参见 Intro(1))-允许一个选项之后的选项参数组以空格分隔并以引号括起来。例如,

cmd -a -b -o "xxx z yy" filename

不能正确处理。要更正此缺陷,应使用 getopts 命令,而不是 getopt

如果接受选项参数的选项后面跟有一个值,该值与 optstring 中列出的其中一个选项相同(请参见前面的“示例”部分)但使用以下命令行:

cmd -o -a filename

getopt 会始终将其视为 –o 的选项参数;但不能将 –a 识别为选项。对于这种情况,此示例的中 for 循环将跳过 filename 参数。