移除 zsh 下 $PATH 变量中的重复值

最近发现 iTerm2 下的 $PATH 变量里出现重复的几组路径(npm, composer, go 相关的),一开始以为是重复定义了,排查了半天发现不是。上网搜了一下,找到一个解决方案:

~/.zshrc 文件中最后一次 export PATH之后加入一行:

typeset -aU path

这样 $PATH 变量里的所有路径就都是唯一的了。

原理是什么呢?pathPATH 是不同的。通过在变量前面加上变量扩展 t 来检查:

$ echo ${(t)path}
array-tied-unique-special
$ echo ${(t)PATH}
scalar-tied-export-special

但它们是链接变量,你更改一个变量就会同时更改另一个变量,但它们具有不同的属性。具体 scalar-export-special 的特殊性是什么,抱歉,我是真不知道(因为原文作者也说他不知道,更别说我这个翻译的了…… zsh 是真的毫无研究啊)。

typeset 声明就简单多了,它将路径类型从 array-special 更改为 array-unique-special. -a 标志表示数组,-U 标志表示唯一。


参考文章:

本条目发布于。属于乱七八糟分类。