0

さまざまな形式で引数を取ることができるbashスクリプトがあります。

形式1:(myscript.sh value1 value2 [value3 value4] -p -g引数のあるオプションにはスイッチ/フラグなし、引数のないオプションにはスイッチ/フラグがあり、どの文字列がどの値に対応するかは、値が指定された順序によって部分的に決定され、文字列のコンテンツの正規表現マッチングによって部分的に決定されます)。

フォーマット2:(myscript.sh -s value1 -t value2 [-v value3 -w value4] -p -g引数ありとなしの標準オプション、で簡単に処理可能getopts

フォーマット3:myscript.sh --longopt value1....など(引数ありとなしの標準のロングオプションフォーマット)。

愚かな部分は次のとおりです。構文を組み合わせることができます。myscript.sh -p value1 value3 --longopt value4 -t value2 -g有効である必要があり、value1正規value3表現または他の引数に対する相対位置によって検出されます。

このスクリプトは、さまざまな方法で数十のチームによって使用されており、そのほとんどは自動化されており、誰もがこれらの使用方法とのレガシー互換性を維持することを望んでいます。私は、3つの異なる構文すべてを処理するための、大規模で醜い、完全に手動のオプションパーサーを持っています。単一のオプションを追加して互換性を維持する必要があるたびに、最初にウォッカを1杯必要だと感じます。

私の質問:

このようなオプション構文を簡単に、読みやすく、堅牢に解析できるユーティリティはBash / Unixにありますか?この時点での私の代替案は、手動パーサーと格闘し続けるか、スクリプトにPython/optparseコードの束を埋め込んでそれを使用することです。

4

1 に答える 1

2

getoptsを試しましたか?

while getopts "s:t" OPTION
do
     case $OPTION in
         s)
             VALUE1=$OPTARG
             ;;
                 t)
             VALUE2=$OPTARG
             ;;
             exit
             ;;
         ?)
                #Other stuff
     esac
done     
于 2012-06-27T15:10:53.573 に答える