如何在Fish shell中为单个命令设置环境变量?

5

我有一个环境变量GO111MODULE,在我的~/.config/fish/config.fish文件中设为on

> echo $GO111MODULE
on

根据https://fishshell.com/docs/2.2/faq.html#faq-single-env的说明,我想将其设置为“off”,仅针对单个命令。 作为健全性检查,我尝试了以下echo命令:
> env GO111MODULE=off echo $GO111MODULE
on

然而,我注意到它打印的是on,而不是我期望的off。有人可以解释一下为什么这样不起作用吗?

1
尝试运行:env GO111MODULE=off sh -c 'echo $GO111MODULE' - Chris Dodd
2个回答

15

当你输入该命令时

env GO111MODULE=off echo $GO111MODULE

变量$GO111MODULE会在env运行或设置变量之前立即替换(在当前上下文中)。因此,env只会将GO111MODULE=off echo on视为其参数。

为了看到环境变化的效果,你需要安排在env设置变量之后进行envvar查找。所以可以像这样:

env GO111MODULE=off sh -c 'echo $GO111MODULE'

将显示更改的变量--它周围的单个'将防止当前 shell 展开变量,因此env 将获得4个参数:GO111MODULE=offsh-cecho $GO111MODULE。然后它将使用两个参数调用shsh 再展开变量并使用一个单独的off 参数运行echo


0

替代方案:

 set -lx GO111MODULE off; echo $GO111MODULE
 echo $GO111MODULE

设置本地环境变量,但不幸的是会在此会话中保留它,这可能不是您想要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接