WER
3文字を3文字に分割したいと思います。次のように:
W = array[0]
E = array[1]
R = array[2]
私はコマンドを試しました
WER | cut -c1
W
ただし、新しい文字列を変数に保存することはできません。
頑張った
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
これにより、オフセットから始まる文字列の文字数が提供されます。$parameter
offset
答え2
以下を使用する方が簡単ですzsh
。
string=WER
array=(${(s::)string})
printf '<%s>\n' $array
(配列インデックス付けは、/のようzsh
に0以外のほとんどの他のシェルのように1から始まります。)bash
ksh
または、次を使用しますfish
(配列図1から始まります)。
set string WER
set array (string split '' $string)
printf '<%s>\n' $array
($string
改行文字が含まれていないと仮定)。
POSIXly(POSIXシェルには配列があります(($@
1:から始まる$1
))、これはシステムの標準でも機能しbash
ます。zsh
sh
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
実装では、文字ではなくバイト単位で折りたたむことがあります。つまり、文字列にマルチバイト文字が含まれていると正しく機能しません。