3

我有:

PATH=/bar:/foo

我想:

PATH=/foo:/bar

我不想要:

PATH=/foo:/bar:foo

所以我在想,给定默认路径PATH=/bar,我可以修改$path$PATH作为关联数组):

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

prepend_to_path /foo

但这抱怨:

prepend_to_path:unset:1: not enough arguments

时间太长了,我什至不记得(r)是为了什么,但没有它(unset $path[$1])我得到:

prepend_to_path:1: bad math expression: operand expected at `/home/nerd...'

我究竟做错了什么?

4

2 回答 2

6

您可以将函数的主体替换为:

path=($1 ${(@)path:#$1})

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

于 2013-04-23T19:53:24.797 回答
2

这也有效(并且当你在几个月后回到它时可以说更容易阅读):

prepend_to_path () {
  path[1,0]=$1 
  typeset -U path
}

typeset -U将自动对数组进行重复数据删除,只保留每个元素的第一次出现。

既然export相当于typeset -gx,你也可以export -U path一石两鸟。

编辑: typeset -U只需要应用于特定数组一次,因此可以在 shell 启动的某个地方执行此操作,并从上面的函数中删除该行。

于 2016-04-08T07:12:23.380 回答