shift
誰かがこの単純なパーサーコードに何が必要かを明確にしてくれたらうれしいです。
while getopts ":hp:" option
do
case "${option}" in
p)
some_parameter=${OPTARG}
;;
h)
print_usage_and_exit 0
;;
*)
print_usage_and_exit 1
;;
esac
done
shift $(( OPTIND - 1 ))
たとえば、私にとっては明確ではありません。
shift
なぜ内部ループが必要ないと思いますか?アクセスは引数自体を移動しますか
getopts
、それともどのように機能しますか?shift
なぜ後に必要ですかgetopts
?getopts
なぜ自分でその仕事を終わらなかったのか理解できません。
答え1
変数を更新して処理中の位置引数を追跡する
shift
ため、ループに入る必要はありません。getopts
OPTIND
あなたはしません必要toループ
shift
後:これを使用して、OPTIND
自分で処理する場所パラメータを決定できます。ただし、を使用するshift
ことは、ですでに処理されたパラメータを処理する最も簡単な方法です。getopts
ただし、パラメータを直接事後処理する必要はありません。
持つgetopts
いいえShift自体にはいくつかの利点があります。必要に応じて、パラメータに直接アクセスして元のコマンドラインを再現できます。後者は、たとえばエラーメッセージで役に立つか、同じパラメータを使用して別のコマンドを実行する必要がある場合に便利です(過去に使用したことがあります)。