関数の bash getopts 呼び出しが 2 番目に失敗します。

関数の bash getopts 呼び出しが 2 番目に失敗します。

私はこの関数を内部的に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 OPTINDOPTIND=1getopt_test

リンクを提供してくれた@sivannに感謝します。getoptsは連続して2回呼び出されませんか?スタックオーバーフローで

おすすめ記事