当我开始从 bash 迁移到 zsh 时,我发现了许多差异。其中之一如下:
envy% echo $path
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /opt/X11/bin
envy% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
为什么除了空格和冒号以及您修改它们时它们会相互镜像?我这里没有的关于zsh环境变量的理解是什么?
当我开始从 bash 迁移到 zsh 时,我发现了许多差异。其中之一如下:
envy% echo $path
/usr/local/bin /usr/bin /bin /usr/sbin /sbin /opt/X11/bin
envy% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
为什么除了空格和冒号以及您修改它们时它们会相互镜像?我这里没有的关于zsh环境变量的理解是什么?
$PATH
ist 是一个标量变量,而$path
是一个数组。$PATH
请注意,在第一种情况下,目录在字符串本身内由冒号分隔;在第二种情况下,数组会自动扩展并以空格分隔:两种变体都由zsh自动保持同步。那么,使用数组有什么好处呢?
typeset -U path
以“仅保留每个重复值的第一次出现”(来自man zshbuiltins
)。这意味着这可以使您的路径保持干净,即使您连续获取您的路径~/.zshrc
(因为您更改了它或其他原因)并且不会一次又一次地将相同的值弄乱。path+=(/new/path)
将新目录添加到您的 PATH。要删除您必须使用一些技巧的元素,请参见例如https://stackoverflow.com/q/3435355/2037712或http://www.zsh.org/mla/users//2005/msg01132.htmlfor i ($path) { print $i # or do something else }
最后,这是我试图保持搜索路径整洁的配置摘录:
资料来源:我自己对另一个问题的回答。