読者です 読者をやめる 読者になる 読者になる

くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

BashでStringから配列に変換してfor文で回す

bash

久しぶりにbashの配列を扱おうとして、??となったので、その備忘録。

改行で区切れば、配列を使わなくても、for文で回せる!

いつもは、こんな感じで、for文でまわしてた

#!/bin/bash

text='
aaa
bbb
ccc
'

for i in ${text}; do
  echo $i
done

でも、2つのリストにある文字列を同じインデックスで扱いたいときには、配列にしないといけない。。。

でも、2つのリストを扱いたくなって、困った。

やりかたはこんな感じ。

#!/bin/bash

text='
aaa
bbb
ccc
'

text2='
AAA
BBB
CCC
'
## 配列に変換
array_text=(`echo $text`)
array_text2=(`echo $text2`)

## for文でくるくるする
for (( i = 0; i < ${#array_text[@]}; ++i )); do
  t1=${array_text[$i]}
  t2=${array_text2[$i]}
  echo "### $t1 -> $t2"
done
  • 改行で区切った文字列をcatすると配列にできる
  • ${#<変数名>[@]で配列のサイズを参照できる
  • インデックスを使った配列要素の参照は${<変数名>[<インデックス>]}

もっとスマートな書き方もあると思いますが、とりあえず、目的を達成したのでおしまい!

参考にしたサイト様