env 命令到底是如何工作的

env 命令到底是如何工作的

我是环境变量的新手,我正在测试如何将环境变量传递和覆盖到我的脚本。

为了测试它的行为,我创建了一个简单的脚本,名称testenv.sh如下:

#!/bin/bash
echo $COLOR

所以,当我跑步时

$ env COLOR=RED ./testenv.sh

我得到了预期的 stdout RED


然而我的问题是,为什么如果我运行以下命令

$ env COLOR=RED echo $COLOR

我没有得到与上面相同的结果,实际上是一个空白的标准输出。

答案1

$COLORenv在调用之前由 shell 展开/bin/echo

除非您调用env扩展该变量的 shell 脚本,否则这是无法工作的。

甚至:

COLOR=RED echo $COLOR

无法按您的预期工作,因为 Shell 变量在设置新环境之前已展开。

您需要将其分成两行:

COLOR=RED
echo $COLOR

使其按您的预期工作。

如果您致电:

env COLOR=RED sh -c 'echo $COLOR'

它之所以有效,是因为单引号可以防止变量扩展,并且当新 shell 在新环境中运行时,变量扩展会被延迟。

相关内容