各単語が配列要素になるように空白で区切られた複数の単語を含む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
多くのシェルとは異なり、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から始まることを覚えておいてください。
a=( $s )
¹などの文字は、特殊文字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 )
。