在.zshrc config中使用var multi-GOPATH设置GOBIN根目录
我希望在.zshrc config中使用var multi-GOPATH设置GOBIN根目录,zshrc,Zshrc,我希望$GOBIN等于~/mygo/bin:~/go/bin,但它是~/mygo:~/go/bin。 我怎样才能给他们一个更好的方法?thx溶液 现在,${name/pattern/repl}参数扩展可用于将/bin附加到每个元素,或者更确切地说,将每个元素的结尾替换为/bin。为了匹配字符串的结尾,模式需要以%开头。由于任何字符串都应匹配,否则模式为空: GOPATH_ARRAY=(${(s<:>)GOPATH) 最后,需要将数组转换回冒号分隔的字符串。这可以通过j:string
$GOBIN
等于~/mygo/bin:~/go/bin
,但它是~/mygo:~/go/bin
。
我怎样才能给他们一个更好的方法?thx溶液
现在,${name/pattern/repl}
参数扩展可用于将/bin
附加到每个元素,或者更确切地说,将每个元素的结尾替换为/bin
。为了匹配字符串的结尾,模式
需要以%
开头。由于任何字符串都应匹配,否则模式为空:
GOPATH_ARRAY=(${(s<:>)GOPATH)
最后,需要将数组转换回冒号分隔的字符串。这可以通过j:string:
参数扩展标志来完成。它是s:string:
的对应项:
GOBIN_ARRAY=(${GOPATH_ARRAY/%//bin})
替代解决方案 也可以在不使用参数扩展标志或嵌套替换的情况下执行此操作,只需将
/bin
添加到字符串的末尾,并用/bin:
替换每个:
:
GOBIN=${(j<:>)${${(s<:>)GOPATH}/%//bin}}
${name//pattern/repl}
扩展将每次出现的pattern
替换为repl
,而不仅仅是第一个类似的${name/pattern/repl}
这也适用于bash
就我个人而言,我觉得它有点“黑客”,主要是因为你需要写两次/bin
,还因为它完全避开了底层语义。但这只是个人偏好,结果是一样的
注: 定义
GOPATH
时,就像您在问题中所做的那样
export GOBIN=${GOPATH//://bin:}/bin
zsh
将使用您的主目录展开每次出现的~/
。因此,GOPATH
的值将是/home/kevin/mygo:/home/kevin/go
——假设用户名是“kevin”。因此,GOBIN
也将具有扩展路径,/home/kevin/mygo/bin:/home/kevin/go/bin
,而不是~/mygo/bin:~/go/bin
这可以通过引用值-
GOPATH=“~/mygo:~/go”
来防止,但我建议不要这样做~
作为主目录的同义词不是操作系统的一项功能,虽然Shell通常支持它,但其他程序(需要GOPATH
或GOBIN
的程序)可能不会这样做。您希望得到什么结果?
GOBIN=${(j<:>)GOBIN_ARRAY}
GOBIN=${(j<:>)${${(s<:>)GOPATH}/%//bin}}
export GOBIN=${GOPATH//://bin:}/bin
export GOPATH=~/mygo:~/go