bash 配列

estis2014/10/07 (火) 21:55 に投稿

代入

$ array=(1 2 3 4)

値確認

変数名だけだと、インデックス[0]の呼び出し
$ echo $array
1
インデックスを付けて各要素を呼び出す
$ echo ${array[0]}
1
$ echo ${array[1]}
2
$ echo ${array[2]}
3
$ echo ${array[3]}
4
値がないものは、「ない」
$ echo ${array[4]}

{}でくくり忘れるとこうなる
$ echo $array[3]
1[3]
全要素出力
$ echo ${array[@]}
1 2 3 4
要素数?
$ echo ${#array[@]}
4
$ echo ${#array}
1

値代入

インデックスを指定しないと、インデックス[0]への代入
$ array=2
$ echo $array
2
$ echo ${array[0]}
2
$ echo ${array[@]}
2 2 3 4
インデックスを指定して値代入
$ array[1]=5
$ echo ${array[@]}
2 5 3 4
文字列も代入できます
$ array[2]=abcd
$ echo ${array[@]}
2 5 abcd 4
インデックス値は間を飛ばしてもいい
$ array[5]=xyz
$ echo ${array[@]}
2 5 abcd 4 xyz
要素数?、配列として、インデックス0~5(4は値無し)で6要素あるつもりなのだが
$ echo ${#array[@]}
5
勝手に配列が詰められたわけではなく、インデックス4には値はない(厳密には使用されていない)
$ echo ${array[4]}

$ echo ${array[5]}
xyz

$# は何だろう

$ value=2
$ echo ${#value}
1
$ echo ${array[@]}
2 5 abcd 4 xyz
$ echo ${#array[@]}
5
$ echo ${#array[0]}
1
$ echo ${#array[1]}
1
$ echo ${#array[2]}
4
$ echo ${#array[3]}
1
$ echo ${#array[4]}
0
$ echo ${#array[5]}
3
各変数が返す値の長さを返している。
$ unset array[2]
$ echo ${array[@]}
2 5 4 xyz
$ echo ${#array[@]}
4

${array[@]}は、配列として見ているので、個々の要素の長さの合計値ではなく、値を持つ(使用されている)要素の数