複数の単語を含むZsh文字列変数を配列に割り当てる必要があります。

複数の単語を含むZsh文字列変数を配列に割り当てる必要があります。

各単語が配列要素になるように空白で区切られた複数の単語を含む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 )

関連情報