KEDARUMA-FANTASTIC
6/17/2017 - 2:00 PM

bash array

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"