getopts 未找到多个选项中缺少的参数

getopts 未找到多个选项中缺少的参数

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)解释为前一个选项的值。如果缺少值,您需要自行处理错误。

相关内容