慣例的には、--
それ以降はそれ以上のオプションがないことを意味します。getopts
withcase
句を使用すると、-)
パターン句が一致しないようです--
。それでは、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
。