やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

bashの配列(宣言・操作)

 ${array[0]}みたいなヤツ。

成果物

記法

定義

コード 意味
名前=(値 値 ...) 配列
local -r 名前=(値 値 ...) 配列(readonly)
declare -a 名前=(値 値 ...) 配列
declare -ar 名前=(値 値 ...) 配列(readonly)
unset 名前[index] 指定した配列のindexと値を削除する
unset 名前 指定した配列を削除する

参照

コード 意味
${名前[index]} 指定した配列のindexにおける値を取得する
${#名前[@]} 指定した配列の要素数を取得する
${!名前[@]} 指定した配列のindex一覧を取得する(スペース区切)

コード抜粋

宣言と参照

Reference() {
    #ARRAY=(A B C)
    local -r ARRAY=(A B C)
    #declare -r ARRAY=(A B C)

    #for item in ${ARRAY[@]}; do echo "$item"; done;
    echo "Count: ${#ARRAY[@]}"
    echo "Items: ${ARRAY[@]}"
    echo "Indexies: ${!ARRAY[@]}"
    for ((i=0; i<${#ARRAY[@]}; i++)); do echo "${ARRAY[$i]}"; done;
}

破壊的操作

DestructiveOperation() {
    local ARRAY=(A B C D E)
    echo "Items: ${ARRAY[@]}"
    echo "Indexies: ${!ARRAY[@]}"

    # 指定位置の要素を削除する
    unset ARRAY[2]
    echo "Items: ${ARRAY[@]}"
    echo "Indexies: ${!ARRAY[@]}"
    # 先頭の要素を削除する
    ARRAY=("${ARRAY[@]:1}")
    echo "Items: ${ARRAY[@]}"
    echo "Indexies: ${!ARRAY[@]}"
    # 末尾の要素を削除する
    declare -i num=${#ARRAY[@]}-1
    ARRAY=("${ARRAY[@]:0:$num}")
    echo "Items: ${ARRAY[@]}"
    echo "Indexies: ${!ARRAY[@]}"
    
    # 先頭に追加
    ARRAY=(9 "${ARRAY[@]}")
    echo "Items: ${ARRAY[@]}"
    echo "Indexies: ${!ARRAY[@]}"
    # 末尾に追加
    ARRAY=("${ARRAY[@]}" Y) 
    echo "Items: ${ARRAY[@]}"
    echo "Indexies: ${!ARRAY[@]}"
    ARRAY+=( Z )  
    echo "Items: ${ARRAY[@]}"
    echo "Indexies: ${!ARRAY[@]}"

    # 指定位置に代入
    ARRAY[0]=7
    echo "Items: ${ARRAY[@]}"

    # 全削除
    unset ARRAY
    echo "Items: ${ARRAY[@]}"
}

対象環境

  • Raspbierry pi 3 Model B+
  • Raspbian stretch 9.0 2018-11-13
  • bash 4.4.12
$ uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux