「--」に出会ったときの「getopts」の動作は何ですか?

「--」に出会ったときの「getopts」の動作は何ですか?

慣例的には、--それ以降はそれ以上のオプションがないことを意味します。getoptswithcase句を使用すると、-)パターン句が一致しないようです--。それでは、getopts会うときの行動は何ですか----オプションとして扱いますか、オプションではないパラメータとして扱いますか、それとも両方として扱いませんか?ありがとうございます。

答え1

動作は、コマンドラインの解析を停止し、残りのパラメータを変更せずにそのままにすることです。それ自体が削除されます--(またはむしろ$OPTIND処理されたことを示しますが、$opt以下のコードでは処理されず、正常に-実行すると決して表示shift "$(( OPTIND - 1 ))"されません)。

例:

#!/bin/bash

while getopts 'a:b:' opt; do
    case "$opt" in
        a)  printf 'Got a: "%s"\n' "$OPTARG" ;;
        b)  printf 'Got b: "%s"\n' "$OPTARG" ;;
        *)  echo 'error' >&2
            exit 1
    esac
done

shift "$(( OPTIND - 1 ))"

printf 'Other argument: "%s"\n' "$@"

実行してください:

$ bash script.sh -a hello -- -b world
Got a: "hello"
Other argument: "-b"
Other argument: "world"

ご覧のとおり、コマンド-b worldラインビットは処理されませんgetopts

--オプションではなく、最初の引数または最初の引数でコマンドラインの解析を停止します。

$ bash script.sh something -a hello -- -b world
Other argument: "something"
Other argument: "-a"
Other argument: "hello"
Other argument: "--"
Other argument: "-b"
Other argument: "world"

--この場合、いいえそれまでに達したことがないので「削除」しますgetopts

関連情報