跳过导航链接 | |
退出打印视图 | |
手册页第 1 部分:用户命令 Oracle Solaris 11 Information Library (简体中文) |
- 解析命令选项
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):
|
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 参数。