どちらかというとごはん派

主に仕事用のメモブログ。

【bash】 配列のあれこれ

2008年10月21日 23時22分03秒 | linux bash
bashはshellと違って、foreachが使用できないので
もし同じような利用を求める場合には、配列を利用すること

■配列の設定
array=(1 2 3 4 5)

■使用方法
$ for num in ${array[@]};do

$  echo ${num}

$ done

■結果
1
2
3
4
5

■+@として・・
$ array=(a b c d)
$ i=0
$ while [ $count -le 4 ];do
$ echo "${array[i]}"
$ i=`expr $i + 1`
$ done
1
2
3
4
5
これも同様の結果を得る。
配列の要素は0からはじまる(cやjavaと同じ)

■豆知識
①まずは5つの変数に値を設定
str1=A
str2=B
str3=C
str4=D
str5=E

②変数を配列に格納
array=($str1 $str2 $str3 $str4 $str5)

③表示
$ for num in ${array[@]};do

$  echo ${num}

$ done
A
B
C
D
E

ここまでは問題ないが、、、、
もし①を下記のようにした場合
str1=A
str2=B
str3=
str4=D
str5=E

結果は以下のようになる
A
B
D
E

つまり配列は左詰めで格納されるということ。

仮にこんなロジックだと困ってしまう。
$ for num in ${array[@]};do
$ if [ "$num" = "" ];then #空白だった場合
$ echo "空白です。"
$ else
$ echo "値が入ってます。"
$ fi
$ done
値が入ってます。
値が入ってます。
値が入ってます。
値が入ってます。
空白です。

これ、3番目が空白なのに左詰にされたことで5番目が空白のように見える。
もし空白であるなしで処理を変えるようであれば、間違った処理をしてしまう。

もし結果を
値が入ってます。
値が入ってます。
空白です。
値が入ってます。
値が入ってます。

としたい場合には、

array=("$str1" "$str2" "$str3" "$str4" "$str5")
とダブルコート(")で囲ってあげましょう。