Current File : //usr/man/zh_CN.UTF-8/man1/getopt.1
'\" te
.\" Copyright 1989 AT&T
.\" Copyright 2000, Sun Microsystems, Inc. All Rights Reserved
.TH getopt 1 "2000 年 1 月 7 日" "SunOS 5.11" "用户命令"
.SH 名称
getopt \- 解析命令选项
.SH 用法概要
.LP
.nf
\fBset\fR \fB-–\fR ` getopt \fIoptstring\fR $ * `
.fi

.SH 描述
.sp
.LP
\fBgetopts\fR 命令取代了 \fBgetopt\fR。有关更多信息,请参见下文的“附注”部分。
.sp
.LP
\fBgetopt\fR 可用于打断命令行中的选项以便于 shell 过程进行简单解析,还可用于检查合法选项。\fIoptstring\fR 是一串可识别的选项字母;请参见 \fBgetopt\fR(3C)。如果某个字母后面跟有冒号 (\fB:\fR),则该选项需要有一个参数,可以使用空格将其与该参数隔开,也可以不使用。特殊选项 \fB–\fR 用来限定选项的结尾。如果显式使用了该选项,则 \fBgetopt\fR 会识别出该选项;否则,\fBgetopt\fR 将生成该特殊选项;在任一情况下,\fBgetopt\fR 都会将其放置在选项的结尾。shell 的位置参数 (\fB$1 $2\fR . . . ) 已重置,以便每个选项以 \fB-\fR 开头并位于自己的位置参数中;还会将每个选项参数解析到其自己的位置参数中。
.SH 示例
.LP
\fB示例 1 \fR为命令处理参数
.sp
.LP
以下代码片段显示了如何为可以接受选项 \fB-a\fR 或 \fB-b\fR,以及选项 \fB-o\fR(该选项需要一个参数)的命令处理参数:

.sp
.in +2
.nf
\fBset -- `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\fR
.fi
.in -2
.sp

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

.sp
.in +2
.nf
\fBcmd -aoarg filename1 filename2
cmd -a -o arg filename1 filename2
cmd -oarg -a filename1 filename2
cmd -a -oarg -- filename1 filename2\fR
.fi
.in -2
.sp

.SH 属性
.sp
.LP
有关下列属性的说明,请参见 \fBattributes\fR(5):
.sp

.sp
.TS
tab() box;
cw(2.75i) |cw(2.75i) 
lw(2.75i) |lw(2.75i) 
.
属性类型属性值
_
可用性system/core-os
CSIenabled(已启用)
.TE

.SH 另请参见
.sp
.LP
\fBIntro\fR(1)、\fBgetopts\fR(1)、\fBgetoptcvt\fR(1)、\fBsh\fR(1)、\fBshell_builtins\fR(1)、\fBgetopt\fR(3C)、\fBattributes\fR(5) 
.SH 诊断
.sp
.LP
如果 \fBgetopt\fR 遇到不包括在 \fIoptstring\fR 中的选项字母,将会在标准错误上输出一条错误消息。
.SH 附注
.sp
.LP
在下一个主要发行版中将不支持 \fBgetopt\fR。对于本发行版,提供了一个转换工具,即 \fBgetoptcvt\fR。有关更多信息,请参见 \fBgetopts\fR(1) 和 \fBgetoptcvt\fR(1)。
.sp
.LP
重新扫描选项时,请将 \fBoptind\fR 重置为 \fB1\fR。
.sp
.LP
\fBgetopt\fR 不支持命令语法标准的规则 8 的部分内容(请参见 \fBIntro\fR(1))-允许一个选项之后的选项参数组以空格分隔并以引号括起来。例如,
.sp
.in +2
.nf
\fBcmd -a -b -o "xxx z yy" filename\fR
.fi
.in -2
.sp

.sp
.LP
不能正确处理。要更正此缺陷,应使用 \fBgetopts\fR 命令,而不是 \fBgetopt\fR。
.sp
.LP
如果接受选项参数的选项后面跟有一个值,该值与 \fIoptstring\fR 中列出的其中一个选项相同(请参见前面的“示例”部分)但使用以下命令行: 
.sp
.in +2
.nf
\fBcmd -o -a filename\fR
.fi
.in -2
.sp

.sp
.LP
则 \fBgetopt\fR 会始终将其视为 \fB-o\fR 的选项参数;但不能将 \fB-a\fR 识别为选项。对于这种情况,此示例的中 \fBfor\fR 循环将跳过 \fIfilename\fR 参数。