set -g 和 set -x 之间的区别

11t*_*ker 1 fish

我目前正在从 bash 配置迁移到 Fish,并在翻译我的 bash 导出时陷入困境。Fish 似乎有三种方法可以完成工作,但我不知道应该使用哪一种,或者它们是否有我不知道的副作用

set -g VAR value
set -x VAR value
set -xg VAR value
Run Code Online (Sandbox Code Playgroud)

当然,他们并不都做同样的事情。有人可以解释一下这些差异是什么以及每种差异适用于哪些情况吗?

Kur*_*der 6

不,他们并不都做同样的事情。该-x标志与-g-l-u标志正交。前者只是在 var 上设置导出属性。后三个设置了 var 的范围。VAR您可以在函数内部使用全局的、未导出的实例set -lx VAR value来创建导出的本地范围实例。当控制权从函数返回时,全局作用域VAR将重新存在,并且不会被导出。

如果您使用的是最新版本(2.7,也许是 2.6),您可以set --show VAR显示所有三个范围中的值以及是否导出每个范围的值。