我不知道在使用 zsh j:string:数组扩展序列时如何转义冒号。
在我的 ~/.zshrc 中,我发现将 PATH 构建为数组是令人愉快的。
path_array=(
/sbin
/usr/sbin
$HOME/brew/bin
/bin
/usr/bin
/usr/local/bin
/opt/X11/bin
)
#https://unix.stackexchange.com/questions/23208/building-paths-robustly/23241#23241
#export PATH=${(j:::)path_array}
Run Code Online (Sandbox Code Playgroud)
有很多关于如何在其他字符上连接数组的示例,但不幸的是我看不到如何转义字符“:”,因此我可以按此顺序使用它。
结果是:zsh: error in flags
使用另一个字符('|')它工作正常
echo ${(j:|:)path_array}
/sbin|/usr/sbin|/Users/mf/brew/bin|/bin|/usr/bin|/usr/local/bin|/opt/X11/bin
Run Code Online (Sandbox Code Playgroud)
Re zsh: error in flags: 这个很简单。您可以在参数扩展标志中使用任何其他分隔符:
$ arr=(/usr/local/bin /usr/bin /usr/sbin /bin)
$ print -R ${(j|:|)arr}
/usr/local/bin:/usr/bin:/usr/sbin:/bin
Run Code Online (Sandbox Code Playgroud)
你更大的问题是你一开始就不应该这样做。Zsh 特别有一个小写path变量,它是标量的数组对应项PATH。设置其中一项会自动更新另一项。请参阅http://zsh.sourceforge.net/Doc/Release/Parameters.html#index-path。(同样还有cdpath、fpath、mailpath、manpath等)下面是一个例子:
$ path=(/usr/bin /bin)
$ print -R $PATH
/usr/bin:/bin
$ path=(/usr/local/bin /usr/bin /usr/sbin /bin)
$ print -R $PATH
/usr/local/bin:/usr/bin:/usr/sbin:/bin
$ PATH=/usr/bin:/bin
$ print -R $path
/usr/bin /bin
Run Code Online (Sandbox Code Playgroud)
你明白了。
顺便说一句,我还推荐
typeset -gU path
Run Code Online (Sandbox Code Playgroud)
删除重复项,因为插入重复条目并不罕见path(当您以正确的方式插入路径时:添加到现有数组之前)。
| 归档时间: |
|
| 查看次数: |
1307 次 |
| 最近记录: |