Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中设置多个环境变量来启动命令_Bash_Environment Variables_Command Line Interface - Fatal编程技术网

如何在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