Bash手册说
Run Code Online (Sandbox Code Playgroud)getopts optstring name [args]
当遇到选项结束时,
getopts
以大于零的返回值退出。OPTIND
设置为第一个非选项参数的索引并name
设置为?
。
在Bash Hackers Wikigetopts
教程中的一个示例中:
while getopts ":a" opt; do
case $opt in
a)
echo "-a was triggered!" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done
Run Code Online (Sandbox Code Playgroud)
当遇到选项结束时,getopts
以大于零的返回值退出,因此 while 循环将停止。那么在while循环内部,里面的部分是 \?)
不是从来没有到达过?如果是,为什么会在那里?
谢谢。
它可以处理无效的选项。在示例中,如果您运行script -a
,则该-a
选项是预期的并导致“-a
已触发!”。如果您运行script -b
,-b
则无效并将由\?
案例处理,从而导致“无效选项:-b
”。