如何从Zsh中的$path中删除路径并将其添加到开头而不重复?
我有: 我想:如何从Zsh中的$path中删除路径并将其添加到开头而不重复?,zsh,Zsh,我有: 我想: PATH=/bar:/foo 我不想: PATH=/foo:/bar 所以我在想,如果默认路径是path=/bar,我可以修改$path(即$path作为关联数组): 但这让人抱怨: function prepend_to_path() { unset $path[(r)$1] path=($1 $path) } prepend_to_path /foo 太长时间了,我甚至都不记得(r)是干什么用的,但如果没有它(取消设置$path[$1]),我会得到: 我做错了
PATH=/bar:/foo
我不想:
PATH=/foo:/bar
所以我在想,如果默认路径是path=/bar
,我可以修改$path
(即$path
作为关联数组):
但这让人抱怨:
function prepend_to_path() {
unset $path[(r)$1]
path=($1 $path)
}
prepend_to_path /foo
太长时间了,我甚至都不记得(r)
是干什么用的,但如果没有它(取消设置$path[$1]
),我会得到:
我做错了什么?您可以将函数体替换为:
prepend_to_path:1: bad math expression: operand expected at `/home/nerd...'
相关答案:这也行得通(当你几个月后再看它时,可以说更容易阅读):
typeset-U
将自动消除数组中的重复数据,只保留每个元素的第一次出现
由于export
相当于typeset-gx
,您还可以export-U path
一举两得
编辑:typeset-U
只需应用于特定数组一次,因此可以在shell启动时的某个位置执行该操作,并从上面的函数中删除该行
prepend_to_path:unset:1: not enough arguments
prepend_to_path:1: bad math expression: operand expected at `/home/nerd...'
path=($1 ${(@)path:#$1})
prepend_to_path () {
path[1,0]=$1
typeset -U path
}