2016-11-01 39 views
0

有了一個環境變量,它是這樣:如何在bash啓動命令與多個環境變量設置

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

[編輯:下面提到的,甚至不會工作,但只是因爲$ foo和工作此前由其他一些試驗設定。應該在試驗之間給出「unset 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

其實,即使你的第一個例子('富= 1個回聲「$ foo」的')不起作用,你可能剛從上一次運行中獲得了'foo'。 – IMSoP

+0

啊,你說得對。我應該在試驗之間使用「unset foo」。 – zimon

回答

1

我假設你不希望在當前shell中設置這些環境變量,以使後續的命令不能受這些ENV瓦爾。這個怎麼樣:

$ foo=1 bar=2 bash -c 'echo $foo - $bar ' 
1 - 2 

$ echo $foo 
<no output> 

$ echo $bar 
<no output> 

請注意,環境變量的範圍只限於bash子shell。如接下來的兩個命令所示,這些env vars並未在當前shell中結束。

如果你不關心ENV乏在當前shell結束了後來乾脆以下就足夠了:

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

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

這裏你實際上並不需要'env';關鍵(正如我提出的愚蠢問題中指出的那樣)是'$ foo'使用單引號,稍後使用'bash -c'進行評估。因此'foo = 1 bar = 2 bash -c'echo $ foo - $ bar''也行得通,'foo = 1 bar = 2 some_other_command'。 – IMSoP

+0

@IMSoP,沒錯。謝謝。更新了答案。 –

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

這個「永久性」設置「foo」和「bar」,即在會話的其餘部分它們將保持5和6,並且以前的值將會丟失。這與爲特定命令在上下文中設置它們不同。 – IMSoP

相關問題