如何在具有多个环境变量的bash中启动命令

zim*_*mon 2 bash environment-variables command-line-interface

使用一个环境变量,它就像:

bash$> foo=1 echo "$foo"
1
Run Code Online (Sandbox Code Playgroud)

[编辑:如下所述,即使这样也行不通,但仅是因为$ 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 
Run Code Online (Sandbox Code Playgroud)

可能吗?(使用脚本很明显)

Ash*_*dal 5

我假设您不希望为当前shell设置这些环境变量,以免后续命令不受这些env var的影响。那这个呢:

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

$ echo $foo
<no output>

$ echo $bar
<no output>
Run Code Online (Sandbox Code Playgroud)

注意,环境变量的范围仅限于bash子shell。如以下两个命令所示,这些env var不会在当前shell中结束。

如果您不关心env var会出现在当前shell中,那么只需满足以下条件即可:

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

$  echo $foo - $bar
1 - 2
Run Code Online (Sandbox Code Playgroud)