質問

これは、getoptsは、それらを処理することを可能にするために、ボーンスクリプト内から関数にコマンドライン引数を渡すことができます。

私のスクリプトの残りの部分はうまく機能にパックされたが、私がメインのロジックに引数の処理を移動する必要がありますように見えるし始めています。

以下は、それが今で書かれている方法ですが、それは動作しません。

processArgs()
{
  while getopts j:f: arg
  do
  echo "${arg} -- ${OPTARG}"
     case "${arg}" in
       j)  if [ -z "${filename}" ]; then
           job_number=$OPTARG
           else
              echo "Filename ${filename} already set."
              echo "Job number ${OPTARG} will be ignored.
           fi;;
       f)  if [ -z "${job_number}" ]; then
              filename=$OPTARG
           else
              echo "Job number ${job_number} already set."
              echo "Filename ${OPTARG} will be ignored."
           fi;;
     esac
  done
}

doStuff1
processArgs
doStuff2

それは多分それはスクリプトの引数を読むことができるような方法で関数を定義することは可能ですか?これは、他のいくつかの方法で行うことができますか?私は、getoptsはの機能は好きですが、それはこの場合には、私はそれを得るために、コードの美しさを犠牲にする必要がありますするつもりのように見えます。

役に立ちましたか?

解決

あなたは、変数の後にgetoptsは引数にを提供することができます。デフォルトは、$ @ですが、それはまた、関数がの自分のの引数を表すために使用するもののシェルです。ソリューションの「$ @」を渡すことです - 個々の文字列として、すべてのスクリプトのコマンドライン引数を表す - processArgsに:

processArgs "$@"

スクリプトに(ライン11で引用固定)、およびいくつかちんぷんかんぷんテスト引数を試してみることを追加します:

$ ./try -j asdf -f fooo -fasdfasdf -j424pyagnasd
j -- asdf
f -- fooo
Job number asdf already set.
Filename fooo will be ignored.
f -- asdfasdf
Job number asdf already set.
Filename asdfasdf will be ignored.
j -- 424pyagnasd
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top