最近发现 iTerm2 下的 $PATH 变量里出现重复的几组路径(npm, composer, go 相关的),一开始以为是重复定义了,排查了半天发现不是。上网搜了一下,找到一个解决方案:
在 ~/.zshrc
文件中最后一次 export PATH
之后加入一行:
typeset -aU path
这样 $PATH
变量里的所有路径就都是唯一的了。
原理是什么呢?path
和 PATH
是不同的。通过在变量前面加上变量扩展 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
标志表示唯一。
参考文章:
作者:小李刀刀
原文链接:移除 zsh 下 $PATH 变量中的重复值
裁纸刀下版权所有,允许非商业用途转载,转载时请原样转载并标明来源、作者,保留原文链接。