Bash 5.1.16
以下代码对我不起作用:
optstring=":l:s:vh"
while getopts ${optstring} flag; do
case ${flag} in
(l) listsfile=${OPTARG};;
(s) sourcedir=/${OPTARG};;
(v) verbose=true;;
(h) help=true;;
(:)
echo "Option -${OPTARG} requires an argument!"
showhelpscreen
exit 1
;;
(?)
echo "Invalid options"
showhelpscreen
exit 1
;;
esac
done
echo "went through"
- 如果我提供没有值的“-l”,则会调用 showhelpscreen (:)(确定)
- 如果我为“-l”提供一个值,则一切顺利,并且会打印“went through”(OK)
- 如果我提供“-l -s”,则会打印“went through”。任一选项都需要一个值,但均未给出。我认为 (:) 应该被触发,但事实并非如此。
答案1
正如 larsks 所说,getopts 将第二个“选项”(在本例中为 -s)解释为前一个选项的值。如果缺少值,您需要自行处理错误。