区切り文字なしで文字列を分割して配列に保存します。

区切り文字なしで文字列を分割して配列に保存します。

WER3文字を3文字に分割したいと思います。次のように:

W = array[0]
E = array[1]
R = array[2]

私はコマンドを試しました

WER | cut -c1Wただし、新しい文字列を変数に保存することはできません。

頑張った

set var1 = WER | cut -c1しかし、うまくいきません。

答え1

存在するbash

str=WER

a=( "${str:0:1}" "${str:1:1}" "${str:2:1}" )

または、任意の長い文字列のループとして、次のようにします。

str=WER

a=()
for (( i = 0; i < ${#str}; ++i )); do
    a+=( "${str:i:1}" )
done

${parameter:offset:length}bash 部分文字列拡張lengthこれにより、オフセットから始まる文字列の文字数が提供されます。$parameteroffset

答え2

以下を使用する方が簡単ですzsh

string=WER
array=(${(s::)string})
printf '<%s>\n' $array

(配列インデックス付けは、/のようzshに0以外のほとんどの他のシェルのように1から始まります。)bashksh

または、次を使用しますfish(配列図1から始まります)。

set string WER
set array (string split '' $string)
printf '<%s>\n' $array

$string改行文字が含まれていないと仮定)。

POSIXly(POSIXシェルには配列があります(($@1:から始まる$1))、これはシステムの標準でも機能しbashます。zshsh

string=WER
set --
while [ -n "$string" ]; do
  tmp=${string#?}
  set -- "$@" "${string%%"$tmp"}"
  string=$tmp
done
printf '<%s>\n' "$@"

あなたが使用しているように見えるcshもの:tcsh

set string = WER
set array = "`printf '%s\n' $string:q | fold -w1`"
printf '<%s>\n' $array:q

forと同様に、fish文字列に改行文字が含まれていないとします。また、一部のfold実装では、文字ではなくバイト単位で折りたたむことがあります。つまり、文字列にマルチバイト文字が含まれていると正しく機能しません。

関連情報