-
Notifications
You must be signed in to change notification settings - Fork 9
developer skills
hanyong edited this page Jan 7, 2018
·
4 revisions
命令行参数分为:
- 选项参数,以
-
开头。 - 非选项参数,不以
-
开头,或者出现在特殊参数--
之后。
getopt 对命令行参数进行标准化解析,结果使用 shell 标准化表示:
- 短选项拆分,选项与选项参数拆分。
- 未输入的可选参数表示为空字符串。
- 使用特殊参数
--
分割选项参数与非选项参数,即使没有参数。
典型用法如下:
getopt [options] -o|--options optstring [options] [--] parameters
-
-o
指定短选项,-l
指定长选项。 - 选项后跟一个冒号
:
表示该选项必须设置一个参数,跟两个冒号::
表示可选参数。原始输入中,可选参数必须跟选项连在一起,作为一个参数。 - 要解析的参数列表作为 getopt 的非选项参数,出现在特殊参数
--
(可选)之后。
代码示例:
TEMP="$(getopt -o x -- "${@}")"
eval set -- "${TEMP}"
while true ; do
case "${1}" in
-x)
# ... ...
shift
;;
--)
shift
break
;;
esac
done
同时 getopt 支持简洁用法,options 可省略,短选项字符串为第一个非选项参数:
getopt [options] [--] optstring parameters
无 options 并且短选项字符串不以 -
开头,则开启兼容模式,用法如下:
getopt optstring parameters
兼容模式(与设置环境变量 GETOPT_COMPATIBLE
相同)忽略短选项中的扫描模式(+
或 -
)标记。
短选项字符串可添加扫描模式标记前缀:
-
+
,与设置环境变量POSIXLY_CORRECT
相同,遇到第一个非选项参数后即停止解析。 这对支持子命令非常有用,第一个非选项参数即子命令,后续参数由子命令解析和处理。
$ getopt -- '+xyz' -xz ok -xy -x -z -- 'ok' '-xy' ```
-
-
,保持非选项参数的位置,不会移动到特殊参数--
之后,但最后依然会输出特殊参数--
。
$ getopt -- '-xyz' -xz ok -xy -x -z 'ok' -x -y -- ```
特殊用法:
非兼容模式会将参数用 shell 转义表示,使用这个特性可将任意参数作为 待解析的非选项参数 输入,得到 shell 转义表示。
同时作为副作用,会添加特殊参数 --
前缀。
这里短选项字符串不重要(未使用),可设置为空(或任意值)。
$ getopt -- '' -- -xy
-- '-xy'
简洁用法可直接使用短选项字符串,同时必须以 -
开头避免开启兼容模式,同时又不能是 getopt 选项,
作为特殊用法可使用单独的 -
字符作为选项字符串:
$ getopt - -- -xy
-- '-xy'
可使用 tail -c +5
过滤掉特殊参数 --
前缀。