私はこの関数を内部的にfunction
使用してbashに渡された引数を解析しようとしています。getopts
関数が最初に呼び出されると機能しますが、それ以降のすべての呼び出しでは失敗します。
以下は簡単なテストケースです。
#!/bin/bash
function getopt_test {
PARAMS=""
while getopts "a:" opt; do
case $opt in
a)
PARAMS="${PARAMS} $OPTARG"
;;
esac
done
echo "PARAMS => $PARAMS"
}
getopt_test -a call_1
getopt_test -a call_2
スクリプトの出力は次のとおりです。
~$ ./tst.sh
PARAMS => call_1
PARAMS => <--- missing 'call_2'
~$
2回目の呼び出しの前に何らかの方法でリセットする必要があるようですが、どうすればよいかgetopts
わかりません。どんなアイデアがありますか?
答え1
答えはgetopts
ポインタを保持することなので、関数の先頭にまたはを追加するのが$OPTIND
コツです。local OPTIND
OPTIND=1
getopt_test
リンクを提供してくれた@sivannに感謝します。getoptsは連続して2回呼び出されませんか?スタックオーバーフローで