Bash 手册说
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
当遇到选项结尾时,getopts
退出并返回大于零的值,因此 while 循环将停止。那么在while循环内部,是不是里面的部分 \?)
一直没有到达呢?如果是,为什么会在那里?
谢谢。
答案1
它是用来处理无效选项的。在示例中,如果您运行script -a
,则该-a
选项是预期的并导致“-a
被触发!”。如果您运行script -b
,-b
无效,将由案例处理\?
,导致“无效选项:-b
”。