3

いくつかの変数を使用する bash スクリプトがあります (それら$fooを and と呼びます$bar)。現在、スクリプトは、次のようにハードコードされた値で上部にそれらを定義しています。

foo=fooDefault
bar=barDefault

....

# use $foo and $bar

私が欲しいのは、これらのいずれかのようにスクリプトを使用できるようにすることです:

myscript              # use all defaults
myscript -foo=altFoo  # use default bar
myscript -bar=altBar  # use default foo
myscript -bar=altBar -foo=altFoo

理想的な解決策は、フラグをチェックしたい変数をリストするだけです。

これを行うための合理的に良い方法はありますか?


私が見getoptたところ、探しているものの約70%を実行できると思いますが、それを構築するツールまたはインジウムなど、残りを取得するツールがあるかどうか疑問に思っています.

4

1 に答える 1

1

eval を使用して、近いことを行うことができます。

foo=fooDefault
bar=barDefault

for arg in "$@"; do
    eval ${arg}
done

このバージョンは先頭のダッシュを気にしないため、次のように実行します。

myscript foo=newvalue

とはいえ、いくつかの注意事項があります。eval を使用しているため、呼び出し元は必要なコード/データをスクリプトに挿入できます。コードを安全にする必要がある場合は、その${arg}前に検証する必要がありますeval

また、データにスペースが必要な場合は、スペースを二重引用符で囲む必要があるため、これはあまりエレガントではありません (コマンド ラインで 1 回、 inner で 2 回目eval)。

myscript foo='"with sapces"'
于 2010-05-17T17:58:44.470 に答える