我知道我可以通过在前面添加环境变量来将其传递给命令,如下所示:
env_variable=value command
但今天我不小心&&
在变量和命令之间添加了:
env_variable=value && command exactly
^
^
我很好奇它与正确的方法有什么不同。我知道您可以使用&&
将命令链接在一起。但有趣的是,该命令没有收到变量,为什么呢?如果有人解释第二个变体与第一个变体到底有何不同以及为什么命令没有看到该变量,我将不胜感激。谢谢
答案1
foo=bar && somecmd
几乎相同(因为作业不太可能失败)
foo=bar; somecmd
与(在单独的行上)相同
foo=bar
somecmd
这是对名为 的 shell 变量进行赋值foo
,然后运行命令somecmd
。如果foo
不是export
ed (默认情况下 shell 变量不是),那么它不会出现在somecmd
.但您可以在同一个 shell 中使用。
参见,例如
答案2
您可以通过 && 将命令链接在一行中,以便它们按顺序执行 - 前提是所有先前的命令都成功运行。每个都按原样在 shell 中运行,并且不会修改 shell。因此,每个进程都从它运行的 shell 中获取环境变量。
$ LC_ALL=C && commandB
--> 执行LC_ALL=C,如果向shell返回0,则执行commandB(使用默认shell环境)
$ LC_ALL=C commandA
--> 将变量 LC_ALL 设置为 C 并执行 commandA,并对环境进行这些更改(有效地执行此命令)