2016-11-01 1 views
0

を設定します。は、それがのように行く1つの環境変数で

bash$> foo=1 echo "$foo" 
1 

[EDIT:以下のように、でもそれは動作しませんが、$ fooがあったためだけに働きました以前に他のいくつかの試験によって設定された。 ]

しかし、コマンドが開始されたのと同じコマンドラインで複数の環境変数を設定する必要がある場合はどうすればよいでしょうか? これらは動作しません:

bash$> foo=1 bar=2 echo "$foo $bar" 
1 

bash$> foo=1 && bar=2 echo "$foo $bar" 
1 

bash$> (foo=1;foo=2) && echo "$foo $bar" 
1 

bash$> (foo=1 && foo=2) && echo "$foo $bar" 
1 

可能ですか? (それは明らかであるスクリプトを使用して)

+1

実は、も、あなたの最初の例( 'FOO = 1つのエコー「$ fooの」')うまくいかない場合は、前回の実行時に 'foo'が設定されている可能性があります。 – IMSoP

+0

ああ、そうです。私は試練の間に "unset foo"を使っていたはずです。 – zimon

答えて

1

私は、後続のコマンドは、これらのenv VARSによって影響を受けることができないように、あなたはこれらの環境変数は、現在のシェルのために設定されることを望まないと仮定しています。これについてどうか:

環境変数の範囲はbashサブシェルに限られていたことに注意してください。次の2つのコマンドで示されているように、現在のシェルではenv変数が終了しませんでした。

あなたはenvを懸念していない場合は、次は十分であろう、単に現在のシェルで終わるvarsは:

$ foo=1; bar=2; echo "$foo $bar" 
1 2 

$ echo $foo - $bar 
1 - 2 
+0

実際にはここで 'env'は必要ありません。キー(私が二重引用符として提案した質問で指摘されている)は、 '$ foo'が一重引用符で囲まれており、後に' bash -c'で評価されます。 'foo = 1 bar = 2 bar-2 some_other_command'と同様に' foo = 1 bar = 2 bash -c 'echo $ foo - $ bar'はうまく動作します。 – IMSoP

+0

@IMSoP、それは本当です。ありがとう。更新された答え。 –

-1
$ foo=5;bar=6; echo "$foo $bar" 
5 6 
+2

これは ''永久に '' foo'と 'bar'を設定します。つまり、残りのセッションでは5と6のまま残り、以前の値は失われます。これは、特定のコマンドに対してコンテキストを設定するのとは異なります。 – IMSoP

関連する問題