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

How to set an environment variable for just one command in the Fish shell?

我有一个环境变量 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 。谁能解释为什么这不起作用?

当你输入命令时

env GO111MODULE=off echo $GO111MODULE

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

为了查看环境变化的效果,您需要在 env 设置它之后安排执行 envvar 查找 。所以像:

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

将显示更改后的变量 -- 它周围的单个 ' 将阻止当前 shell 扩展变量,因此 env 将获得 4 个参数:GO111MODULE=off sh -cecho $GO111MODULE。然后它将使用两个参数调用 sh,这将依次使用单个 off 参数扩展变量和 运行 echo

选择:

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

设置本地环境变量,不幸的是,为本次会话保留了它,这可能不是您想要的。