如何仅在Fish Shell中为一个命令设置环境变量?

Kur*_*eek 0 environment-variables fish

我有一个环境变量GO111MODULE被设置为on我的~/.config/fish/config.fish

> echo $GO111MODULE
on
Run Code Online (Sandbox Code Playgroud)

https://fishshell.com/docs/2.2/faq.html#faq-single-env之后,我想将其设置off为单个命令。作为健全性检查,我尝试了如下echo命令:

> env GO111MODULE=off echo $GO111MODULE
on
Run Code Online (Sandbox Code Playgroud)

但是,我注意到这正在打印,on而不是off我期望的那样。谁能解释为什么这行不通?

Chr*_*odd 9

输入命令时

env GO111MODULE=off echo $GO111MODULE
Run Code Online (Sandbox Code Playgroud)

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

为了查看环境更改的影响,您需要安排 env设置环境进行envvar查找。所以像这样:

env GO111MODULE=off sh -c 'echo $GO111MODULE'
Run Code Online (Sandbox Code Playgroud)

将显示更改后的变量- '周围的单号将阻止当前shell扩展var,因此env将获得4个参数:GO111MODULE=off sh -cecho $GO111MODULE。然后,它将sh使用两个arg 进行调用,这将反过来扩展该变量并echo使用单个offarg 运行。