2016-11-01 42 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

相关问题