Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Zsh中的$path中删除路径并将其添加到开头而不重复?_Zsh - Fatal编程技术网

如何从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
}