我是环境变量的新手,我正在测试如何将环境变量传递和覆盖到我的脚本。
为了测试它的行为,我创建了一个简单的脚本,名称testenv.sh
如下:
#!/bin/bash
echo $COLOR
所以,当我跑步时
$ env COLOR=RED ./testenv.sh
我得到了预期的 stdout RED
。
然而我的问题是,为什么如果我运行以下命令
$ env COLOR=RED echo $COLOR
我没有得到与上面相同的结果,实际上是一个空白的标准输出。
答案1
$COLOR
env
在调用之前由 shell 展开/bin/echo
。
除非您调用env
扩展该变量的 shell 脚本,否则这是无法工作的。
甚至:
COLOR=RED echo $COLOR
无法按您的预期工作,因为 Shell 变量在设置新环境之前已展开。
您需要将其分成两行:
COLOR=RED
echo $COLOR
使其按您的预期工作。
如果您致电:
env COLOR=RED sh -c 'echo $COLOR'
它之所以有效,是因为单引号可以防止变量扩展,并且当新 shell 在新环境中运行时,变量扩展会被延迟。