如何在Zsh中从$ PATH中删除路径并将其添加到开头而不重复?

a p*_*erd 3 zsh

我有:

PATH=/bar:/foo
Run Code Online (Sandbox Code Playgroud)

我想要:

PATH=/foo:/bar
Run Code Online (Sandbox Code Playgroud)

我不想要:

PATH=/foo:/bar:foo
Run Code Online (Sandbox Code Playgroud)

所以我在想,鉴于默认路径是PATH=/bar,我可以修改$path(这是$PATH一个关联数组):

function prepend_to_path() {
  unset $path[(r)$1]
  path=($1 $path)
}

prepend_to_path /foo
Run Code Online (Sandbox Code Playgroud)

但是抱怨:

prepend_to_path:unset:1: not enough arguments
Run Code Online (Sandbox Code Playgroud)

已经很久了,我甚至不记得是什么(r),但没有它(unset $path[$1])我得到:

prepend_to_path:1: bad math expression: operand expected at `/home/nerd...'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Ale*_*lex 6

您可以使用以下命令替换函数体:

path=($1 ${(@)path:#$1})
Run Code Online (Sandbox Code Playgroud)

相关回答:https://stackoverflow.com/a/3435429/1107999