2012-01-16 18 views
5

私は、カスタム環境変数を解析するスクリプトを実行するUnix bash関数を持っています。関連する変数をbashにエクスポートするのを避け、代わりに実行コマンドの一部としてスクリプトに対してのみ設定します。ローカルbash関数変数のスクリプトの環境変数を設定する

変数にコマンドを直接設定すると(例:VARNAME=VARVAL script_name)、正常に動作します。しかし、異なる条件に基づいて複数の変数を設定したいので、ローカル変数変数を使用して環境変数の設定を保存し、この変数をスクリプト実行コマンドで使用したいと考えています。 私は最終的に例えばVARNAME=VARに設定されているローカル変数 "vars"を持っていますが、私のbash関数から${vars} script_nameを実行しようとすると、"コマンドが見つかりません"というエラーメッセージが表示されます。$ vars変数割り当てのエラー - つまり、$ varsの内容は、環境変数の代入ではなくコマンドとして解釈されます。

私はコマンド構文のさまざまなバリエーションを試しましたが、これまで役に立たなかったのです。 現在、私はスクリプトを呼び出す前に関数内の関連する変数をエクスポートしてから以前の値に設定を解除する必要がありますが、これは実際に私が望んでいた解決策ではありません。

ご協力いただければ幸いです。

おかげで、あなたはevalを使用しようとすることができ式としての代わりに、コマンドとして、あなたの変数の内容を評価するために シャロン

答えて

3

eval ${vars} script_Name 
+0

迅速な返信ありがとうございます。出来た :-)! (私は実際にある時点でevalを試してみましたが、間違った構文を誤って使用していました) – Sharon

+0

['eval' is evil](http://mywiki.wooledge.org/BashFAQ/048) – l0b0

2

しかし、私は設定したいので、複数の変数は、別の 条件に基づいて、 環境変数の設定を格納するローカル関数変数を使用し、この変数を スクリプトexecutio nコマンド。

変数を別の変数に格納する必要はありません。あなたは、コマンドに複数の変数を割り当てることができます。

$ cat test.sh 
#!/usr/bin/env bash 
echo "$foo" 
echo "$bar" 
$ foo=abc bar=def ./test.sh 
abc 
def 

これもsafer than evalであるという利点があります。

+1

これは私を助けます。私はスクリプトにどのような変数値を設定する必要があるかを事前に知っていません。私は実行時に、bash関数に渡されたフラグを解析することでこれを判断します。そのため私は変数を使用しています - 関数オプションの解析に基づいてローカル変数を環境変数の割り当てで更新し、スクリプトの呼び出しでローカル変数を使用します。この場合も "eval"を使用するとうまくいきます。私は、より単純な関数フラグを使用したいので、bash関数の呼び出しで環境変数を設定したくないことに注意してください。 – Sharon

関連する問題