0

getopts を使用して、bash で実行されているカスタム スクリプトのオプションを解析しています。

これを実現するためのコードは非常に標準的です。

while getopts :s: opt; do
  case $opt in
    s)
      echo "\$OPTARG is $OPTARG"
      ;;
  esac
done

ただし、数値引数で指定したパラメーターの $OPTARG は空です。

myscript.sh -s 012345 # => [ $OPTARG = "" ]

この問題は、引数を引用符で囲むことで解決できます。ただし、これは数値引数には醜いです。

myscript.sh -s "012345" #  => [ $OPTARG = "012345" ]

これよりもエレガントなソリューションはありますか?

アップデート

私の実際のコードには「:」がないことが判明したため、パラメーターは引数を予期していませんでした。文字列値が期待どおりに出力された理由はわかりませんが、数値引数が機能するようになりました。パラメーターが引数を取ることを指定しました。

4

1 に答える 1

0

使用中の実際のコードに「:」がないことが判明したため、パラメーターは引数を想定していませんでした。getopts :sからに変更するとget opts :s:、問題は解決しました。先頭のコロンには別の意味があることに注意してください。これを含めると getopts のエラー出力が無効になるため、認識されないオプションは報告されません。

于 2012-01-11T22:15:54.897 に答える