0

と呼ばれるexecutbaleがあり、いくつか例を挙げるとapp、いくつかのオプションとコマンドライン引数を使用できます-l -v。今、私はいくつかのオプションで呼び出されるbashスクリプトを書いています、そして私はそれをこのように行いました、app

opt_string="-l -v"  # this string might change according to different conditions used in if-else

# HERE is my problem
./app ${opt_string}

私がどのように呼び出しappたかを見てください。通常、次のようにプロンプ​​トシェルで呼び出します。

./app -l -v

しかし、このスクリプトでは、実際には次のようになります。

./app "-l -v"

cuz${opt_string}は、によって引用された文字列です。そうであれば、正常に実行される""かどうかは疑問です。app

を使用してこれを回避する方法があるかもしれないことを私は知っていますがeval "./app ${opt_string}"、?を取り除く方法はあります""か?

4

2 に答える 2

2

BASH FAQエントリ#50:「コマンドを変数に入れようとしていますが、複雑なケースは常に失敗します!」

opt_string=(-l -v)

./app "${opt_string[@]}"
于 2013-01-16T09:43:06.757 に答える
1

呼び出し方(./app ${opt_string})は問題ありません。opt_string割り当てで値を引用するため、単一の文字列として定義します。ただし、逆参照する場合は引用符を使用していないため、シェルはその値を置き換えてから、個々の単語に分割します。

あなたが言う時

./app "$opt_string"

アプリに1つの引数を渡します。あなたが言う時

./app $opt_string

アプリに複数の引数を渡しています。

bashマニュアルの単語分割を参照してください。

中括弧は引用符ではないことに注意してください。中括弧(このコンテキストでは)は、変数名を周囲のテキストから明確にするのに役立つだけですecho "$opt_string_blah"echo "${opt_string}_blah"

于 2013-01-16T14:41:27.267 に答える