コマンドライン引数を解析するために、stackexchange Webサイトの投稿に従いました。私のプログラムは長いパラメータのみを解析し、すべてのパラメータは必須です。私がしたことは次のとおりです。
getopt --test > /dev/null
if [[ $? -ne 4 ]]; then
echo "getopt --test failed in this environment."
exit 1
fi
function quit {
echo "$1"
exit 1
}
# Option strings
LONG="producer-dir:,consumer-dir:,username:,password:,url:,kafka-host:,checkpoint-dir:"
# read the options
OPTS=$(getopt --longoptions ${LONG} --name "$0" -- "$@")
if [ $? != 0 ]; then
quit "Failed to parse options...exiting."
fi
eval set -- "$OPTS"
# extract options and their arguments into variables.
while true ; do
case "$1" in
--producer-dir )
PRODUCER_DIR="$2"
shift 2
;;
--consumer-dir )
CONSUMER_DIR="$2"
shift 2
;;
--username )
USERNAME="$2"
shift 2
;;
--password )
PASSWORD="$2"
shift 2
;;
--url )
URL="$2"
shift 2
;;
--kafka-host )
KAFKA_HOST="$2"
shift 2
;;
--checkpoint-dir )
CHECKPOINT_DIR="$2"
shift 2
;;
-- )
shift
break
;;
*)
echo "Internal error!"
exit 1
;;
esac
done
パラメータをどの順序で渡しても、最初のパラメータは無視され、結果は空です。残りのパラメータは期待どおりに解析されます。私は何を見逃していますか?
答え1
私の考えでは、最初の引数として意図した内容が解釈されているようですgetopt
。optstring
マニュアルページの先頭にはgetopt
3つの概要がリストされています。 2番目のものを使用しているようです。
`getopt [options] [--] optstring parameters`
最初の項目以降では--
ありませんが、parameters
という点に注意してくださいoptstring
。
getopt
このトピックについて話している間、bashにはtrailing bashgetopts
の内部バージョンがあることに注意する必要がありますs
。他のすべてが同じ場合は、bashの内部機能を使用する方が効率的でなければなりません。