bash array
次サイトから抜粋させて頂きましたm(__)m
bash 配列まとめ
#http://qiita.com/b4b4r07/items/e56a8e3471fb45df2f59
■ 配列を生成する
たとえば、空の配列を生成するには以下のようにします。
array=()
また、ビルトインコマンドの declare(関数スコープでの定義は local)で生成することも可能です。
declare -a array=() # 宣言
declare -a array=("a" "b" "c") # 初期化
some_func() {
local local_array=() # 関数内スコープは local で定義できる ...
}
■ 配列の要素数
echo ${#array[@]} # 3
echo ${#array[*]} # 3
配列の要素数をチェックする場合は、[@] でも [*] でも差異はないようです。
■ 配列のデータを操作する
● データを追加する
# 先頭に追加
array=(3 "${array[@]}") # array は (3 “a” "b" "c")
# 末尾に追加
array=("${array[@]}" 4) # array は (3 "a" "b" "c" 4)
array+=( 5 ) # array は (3 "a" "b" "c" 4 5)
末尾に追加する書き方は二通りですが、どちらでも同じようです。しかし、前者のほうが「先頭に追加」の表記方法と整合性が取れるので、可読性を高めそうです。
● 配列からデータを取り出す
# データの先頭要素を取り出す(破壊的操作)
array=("${array[@]:1}") # array は ("a" "b" "c" 4 5)
# データの末尾要素取り出す(破壊的操作)
declare -i num=${#array[@]}-1
array=("${array[@]:0:$num}") # array は ("a" "b" "c" 4)
# 一行でも書けます
array=(${array[@]:0:((${#array[@]}-1))}) # array は ("a" "b" "c")
● 配列のデータを参照する
i=0
for e in ${array[@]}; do
echo "array[$i] = ${e}"
let i++
done
array[0] = a
array[1] = b
array[2] = c
# C言語風に記述する
for ((i = 0; i < ${#array[@]}; i++)) {
echo "array[$i] = ${array[i]}"
}
array[0] = a
array[1] = b
array[2] = c
# Bash 独自の記述 1
echo "${array[@]}"
a b c
# Bash 独自の記述 2
IFS=$'\n'
echo "${array[*]}"
a
b
c
● 配列のデータから任意の要素を削除する
# ある要素を削除
unset array[1]
echo "${array[@]}" # arrayは("a" "c")
echo ${array[0]} # array[0]は"a"
echo ${array[1]} # array[1]は ""(空)
echo ${array[2]} # array[2]は"c"
配列の中身のデータは削除できても、配列自体は削除できません。
添字を詰めたければ、
array=("${array[@]}"
代入しなおす必要があります。
unset array[@] # 全削除する
echo "${array[@]}" # 配列 array は ""(空)
echo "${#array[@]}" # 要素数は0
● 配列にデータを格納する
array[0]=1
array[1]="a"