如何在bash中设置多个环境变量来启动命令
对于一个环境变量,它的变化如下:如何在bash中设置多个环境变量来启动命令,bash,environment-variables,command-line-interface,Bash,Environment Variables,Command Line Interface,对于一个环境变量,它的变化如下: 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"
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
可能吗?(使用脚本很明显)我假设您不希望为当前shell设置这些环境变量,这样后续命令就不会受到这些环境变量的影响。那么这个呢:
$foo=1bar=2bash-c'echo$foo-$bar'
1 - 2
$echo$foo
$echo$bar
请注意,环境变量的范围仅限于bash子shell。如下面两个命令所示,这些环境变量并没有在当前shell中结束
如果您不担心环境变量最终会出现在当前shell中,那么只需执行以下操作即可:
$foo=1;bar=2;回声“$foo$bar”
1 2
$echo$foo-$bar
1 - 2
实际上,即使是您的第一个示例(foo=1 echo“$foo”
)也不起作用,您可能刚刚从上一次运行中设置了foo
。啊,您是对的。我应该在两次试验之间使用“unset foo”。此“永久”设置foo
和bar
,即在剩余的试验期间,它们将保持5和6,并且以前的值将丢失。这与为特定命令设置上下文不同;关键(正如我作为dupe提出的问题中所指出的)是$foo
在单引号中,稍后由bash-c
进行评估。所以foo=1bar=2bash-c'echo$foo-$bar'
也可以正常工作,就像foo=1bar=2一些其他的命令一样
@IMSoP,没错。谢谢更新答案。
$ foo=5;bar=6; echo "$foo $bar"
5 6