ZSH-如何使用冒号加入数组“:”字符/转义冒号字符?

ZSH-如何使用冒号加入数组“:”字符/转义冒号字符?,zsh,Zsh,我不知道在使用zsh数组扩展序列时如何转义冒号 在我的~/.zshrc中,我发现将我的路径构建为一个数组是令人愉快的 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 #exp

我不知道在使用zsh数组扩展序列时如何转义冒号

在我的~/.zshrc中,我发现将我的路径构建为一个数组是令人愉快的

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}
有很多关于如何在其他字符上加入数组的示例,但不幸的是,我看不到如何转义字符“:”,因此我可以在这个序列中使用它

结果是:zsh:error in flags

使用另一个字符“|”,效果很好

echo ${(j:|:)path_array}

/sbin|/usr/sbin|/Users/mf/brew/bin|/bin|/usr/bin|/usr/local/bin|/opt/X11/bin
Re-zsh:标志错误:这很简单。您可以在参数扩展标志中使用任何其他分隔符:

$ arr=(/usr/local/bin /usr/bin /usr/sbin /bin)
$ print -R ${(j|:|)arr}
/usr/local/bin:/usr/bin:/usr/sbin:/bin
你更大的问题是你一开始就不需要这么做。Zsh有一个小写的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
你明白了

另外,我还建议

typeset -gU path
删除重复项,因为当您以正确的方式插入路径时,在路径中插入重复项并不少见:预先添加到现有数组。

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
你更大的问题是你一开始就不需要这么做。Zsh有一个小写的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
你明白了

另外,我还建议

typeset -gU path

删除重复项,因为以正确的方式插入路径时,在路径中插入重复项并不少见:在现有数组前加前缀。

如果要使用用户输入的分隔符加入数组,该怎么办?变量扩展在这里似乎不起作用:print-R${j |$delimiter | input}@BruceSun-添加一个'p':print-R${pj |$delimiter | input}。如果我想用用户输入的分隔符加入数组呢?变量扩展在这里似乎不起作用:print-R${j |$delimiter | input}@BruceSun-添加一个'p':print-R${pj |$delimiter | input}。