Bourneシェルでユーザ定義関数内getoptsはを使用して
質問
これは、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
所属していません StackOverflow