如何将包含由空格分隔的多个单词的Zsh字符串变量分配给数组,以便每个单词都是数组元素
s='run help behind me'
a=($s)
m=${a[0]}
n=${a[1]}
print "m=$m"
echo n=$n
m=
n=run help behind me
令人困惑,如此简单但仍然无法做到这一点..真的请帮忙
答案1
与许多 shell 相比,zsh 默认情况下在变量扩展期间不执行分词。如 中所述man zshexpn
,您可以使用=
修饰符来启用拆分:
${=spec} Perform word splitting using the rules for SH_WORD_SPLIT during the evaluation of spec, but regardless of whether the parameter appears in double quotes; if the `=' is doubled, turn it off. This forces parameter expansions to be split into separate words before substitution, using IFS as a delimiter. This is done by default in most other shells.
即a=( ${=s} )
或a=( $=s )
。另外,请记住 zsh 数组的索引是从 1 而不是 0 开始的。
那些,比如a=( $s )
of bash
¹ 根据涉及$IFS
特殊字符的复杂规则进行分割。您还可以使用以下命令根据任意给定字符串进行拆分s
参数扩展标志:
a=( ${(s[ ])s} ) # split $s on spaces only, discarding empty elements
a=( "${(@s[ ])s}" ) # split $s on spaces, preserving empty elements
也可以看看在 zsh 中扩展变量。
1 但请注意,与 相反bash
,它不会在您还需要~
运算符:的基础上进行通配a=( $=~s )
。