Bash で 配列を使ってみる その 2

前回( Bash で 配列を使ってみる その 1 )は値の格納でしたが 今回は配列らしく for ループを使って値を出力します。

まずは 普通の? for 文です。 配列の値を全て出力するには次のように 添え字に "@" か "*" を使います。

$ ARRAY=(one two three four)

$ echo ${ARRAY[@]}
one two three four

$ echo ${ARRAY[*]}
one two three four

これを for 文で使用します。

$ ARRAY=(one two three four)

$ for item in ${ARRAY[@]}
> do
>     echo $item
> done
one
two
three
four

ただし、これは 1 つ問題があります。

Bash の for 文 その 2 で書きましたが for 文は IFS (デフォルトはスペースなど) で区切られた文字列でループさせることができるので 配列の要素が IFS を含む文字列の場合、次のようにループが増えてしまいます。

$ ARRAY=("one1 one2 one3" two three four)

$ echo ${ARRAY[0]}
one1 one2 one3

$ for item in ${ARRAY[@]}
> do
>     echo $item
> done
one1
one2
one3
two
three
four

これを防ぐためにプログラム言語のような for 文を使用します。

配列の添え字の最大を取得するには次のようにします。

$ ARRAY=("one1 one2 one3" two three four)

$ echo ${#ARRAY[@]}
4

$ echo ${#ARRAY[*]}
4

これを for 文で使用します。

$ ARRAY=("one1 one2 one3" two three four)

$ for (( i = 0; i < ${#ARRAY[@]}; i++ ))
> do
>     echo ${ARRAY[$i]}
> done
one1 one2 one3
two
three
four

1 つめの配列も正しく出力されました。

Google サイト内検索

Amazonアソシエイト