当使用getopts
withcase
子句时,*)
作为最后一个模式子句的模式子句是否等同于作为最后两个模式子句的并集\?)
和:)
模式子句?具体来说,
while getopts "<optionString>" opt; do
case $opt in
a) a="$OPTARG"
;;
b) b="$OPTARG"
;;
...
;;
\?) printf "illegal option: -%s\n" "$OPTARG" >&2
exit 1
;;
:) printf "missing argument for -%s\n" "$OPTARG" >&2
exit 1
;;
esac
done
和
while getopts "<optionString>" opt; do
case $opt in
a) a="$OPTARG"
;;
b) b="$OPTARG"
;;
...
;;
*) printf "illegal option: -%s, or missing argument for -%s\n" "$OPTARG" "$OPTARG" >&2
exit 1
;;
esac
done
谢谢。
如果您使用静默错误报告(当第一个字符是冒号时),您只需要检查in
:
和in 。?
getopts
bash
optstring
如果
getopts
不以这种方式使用,它将为无效选项和缺少选项参数(这些通常足够)生成自己的诊断消息。事实上,除非它被静音,否则它不会放置:
或?
放入变量中。在 case 语句中使用
*
将是捕获这两种情况的一种方法,但如果getopts
被静音,您将不知道触发了哪个错误,并且只能对an error occurred while parsing the command line options
用户说些什么。