【问题标题】:How can I remove a path from $PATH in Zsh and add it to the beginning without duplication?如何从 Zsh 中的 $PATH 中删除路径并将其添加到开头而不重复?
【发布时间】:2013-04-17 01:41:25
【问题描述】:

我有:

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...'

我做错了什么?

【问题讨论】:

    标签: zsh


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      这也有效(可以说,几个月后你再看它时会更容易阅读):

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

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

      既然export等价于typeset -gx,你也可以export -U path一石二鸟。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-19
        • 2012-03-09
        • 1970-01-01
        相关资源
        最近更新 更多