💡
【Bash】UTF-8 の文字列から1文字ずつ取り出す
Bash では文字列の文字数やスライスなど UTF-8 に対応しています。
str=あいうえお
echo ${#str}
5
echo ${str:0:1}
あ
for..in ループを使って1文字ずつ取り出してみましょう。
for i in $(eval echo {0..$((${#str} - 1))}); \
do printf "${str:$i:1} "; \
done; echo
あ い う え お
かっこが多くて何をやっているのかわかりにくいので、処理を分解してみます。
最初は範囲の上限の数値です。足し算、引き算のために $((...))
で囲んでいます。
echo $((${#str} - 1))
4
次はこの処理です。
echo {0..$((${#str} - 1))}
{0..4}
単なる文字列が生成されただけで、eval でコードとして評価します。
$ echo $(eval echo {0..$((${#str} - 1))})
0 1 2 3 4
今度は seq コマンドを使ってみます。少しコードが短くなります。
for i in `seq 0 $((${#str} - 1))`; do printf "${str:$i:1} "; done; echo
あ い う え お
Discussion