为子shell设置环境变量

And*_*eKR 15 environment-variables ash subshell

我知道我可以使用这样的环境变量运行命令:

FOO=bar mycommand
Run Code Online (Sandbox Code Playgroud)

我知道我可以在这样的子 shell 中运行命令:

(firstcommand && secondcommand)
Run Code Online (Sandbox Code Playgroud)

但是我可以以某种方式将这两者结合起来吗?

FOO=bar (firstcommand && secondcommand)
Run Code Online (Sandbox Code Playgroud)

给出:

sh: syntax error: unexpected "("
Run Code Online (Sandbox Code Playgroud)

至少在busybox shell(灰烬)中。

编辑: Kusalananda 建议FOO=bar sh -c 'first && second'这确实是一个解决方案。但是,我也对替代答案感兴趣,因为我喜欢 subshel​​l 语法,因为它不需要摆弄转义引号。

Kus*_*nda 18

单程:

FOO=bar sh -c 'first && second'
Run Code Online (Sandbox Code Playgroud)

FOO为单个sh命令设置环境变量。

设置多个环境变量:

FOO=bar BAZ=quux sh -c 'first && second'
Run Code Online (Sandbox Code Playgroud)

另一种方法是export在子shell 中创建变量和它。这样做的export子shell确保内部的外壳没有得到其环境变量:

( export FOO=bar; first && second )
Run Code Online (Sandbox Code Playgroud)

总结(现已删除)注释:export创建环境变量(而不是 shell 变量)需要它。环境变量的问题是它们会被子进程继承。如果firstsecond是外部公用事业(或脚本)看看他们的环境,他们就不会看到FOO不变量export