在我当前的项目中,我尝试将输出获取git branch -r
到 zsh 中的数组,如下所示:
% all_branches = ("${(@f)$(git branch -r)}")
但是,当我运行此命令时,我在终端上收到以下错误消息:
zsh: bad pattern: ( origin/Backplane-Broken-Links
我推断 zsh 对分支名称中的正斜杠有问题。将 git 的输出发送到我的数组时,有没有办法可以处理正斜杠(以及其他特殊字符,如果我遇到其他字符)?
答案1
中的数组赋值语法zsh
(就像bash
从 中借用了该语法zsh
)是:
array=( value1 value2
value3...)
两边不能有空格=
(但里面可以有(空格、制表符或换行符)它们(...)
像往常一样用于分隔单词,以及组成数组成员的单词)。
所以你要:
all_branches=("${(@f)$(git branch -r)}")
或者:
all_branches=( "${(@f)$(git branch -r)}" )
或者:
all_branches=(
"${(@f)$(git branch -r)}"
)
看你喜欢哪种风格。
all_branches=(${(f)"$(git branch -r)"})
也会起作用。当您想要保留空元素时,将整个扩展"..."
与标志结合在一起。@
我不认为 git 分支名称可以为空,并注意无论如何都会$(...)
剥离全部尾随换行符,因此如果空分支位于输出末尾,无论如何它们都会被删除。但我们仍然需要$(...)
引用以防止$IFS
- 分裂。
顺便说一句,这将是和函数array = ()
定义的开始:array
=
$ array = ()
function> echo test
$ array
test
$ =
test
尽管:
array = (foo|bar)
将使用与 glob 模式(如果有)匹配的文件作为参数来运行array
命令(如果找到)。=
(foo|bar)
但在这里,你("${(@f)$(git branch -r)}")
没有形成有效的全局模式,与斜线。
为了完整性,
array = ( value1 value2 )
是 shell 中的有效语法rc
(Research Unix V10 和 plan9 的 shell)。在该 shell 中,您不能这样做echo =
,这会导致语法错误。您需要引用=
.