1

私はgetoptsを使用してスクリプトに取り組んでおり、コマンドには引数を任意の順序で含めることができます。有効な引数-aとファイル名はstuff.txt. 問題は、次のようなコマンドを実行したときです。

program.sh -a -b stuff.txt -c -d

私のコードは引数-aを処理-bし、ファイル名に到達するまで問題ありません。その後、処理を停止し、引数-cに触れません-d。私のコードは次のようになります。

while getopts ":a:b:c:d" opt; do

case "$opt" in

    a) # do something;;

    b) # do something;;

    /?) echo ERROR
        exit 1;;

esac
done

while私はループの外側でファイルに取り組んでいますが、うまく登録されているようです。

4

1 に答える 1

1

各オプション文字の後にコロンが存在するため (最初のコロンはエラー処理に影響します)、各オプションには引数が必要であることを示したので、スクリプトはへの引数と":a:b:c:d"見なします。ファイル名に遭遇すると、オプション処理を停止する必要があることを検出します。-b-a

-a引数を必要としないオプション文字には、引数を指定するか、コロンを削除する必要があります。

これらの修正を行った後、スクリプトはファイル名を引数として認識し-b、変数には処理$OPTARGS時にファイル名が含ま-bれます。

于 2012-05-29T00:51:06.077 に答える