如果传递了两个特定参数,如何退出 getopt?

How to exit getopt if two specific arguments are passed?

我想做的是,如果同时传递两个特定参数,脚本将退出并执行 HELP 函数。

while getopts ":H:D:S:h:" arg; do
case "${arg}" in
H) HOUR=${OPTARG};;
D) DAY=${OPTARG};;
h) HELP;;
\?) #unrecognized option - show help
    HELP;;

因此,如果同时显示 H 和 D,我想终止脚本 运行 并要求用户再次键入。

显然我可以使用类似的东西:

if [[ -z "$HOUR"  || -z "$DAY"  ]]
  then
    HELP

但想知道是否有更好的选择来做这样的事情。干杯!

getopts 不提供对互斥选项的任何明确支持。我建议在 case 语句中捕获它:

case $arg of
    -H) if [[ -n $DAY ]]; then
          printf '-D already detected\n'
          exit 1
        else
          HOUR=$OPTARG
        fi
        ;;
    -D) if [[ -n $HOUR ]]; then
          printf '-H already detected\n'
          exit 1
        else
          DAY=$OPTARG
        fi
        ;;
    -h) HELP
        ;;
    *) HELP
       ;;
esac