■ はじめに
シェルの配列に関して、まとめておく。
目次
【0】シェルの配列種類 【1】配列 - リスト 1)定義方法 2)要素の追加 3)要素の削除 4)関数の引数・戻り値 5)配列のソート 【2】連想配列 - ディクショナリ
【0】シェルの配列種類
シェルの"配列" には、以下の2種類がある 【1】配列 - リスト 【2】連想配列 - ディクショナリ
【1】配列 - リスト
* 配列(Arrays) => Python/javaでいう List型
1)定義方法
* 「declare -a <配列名>」で定義する。 => -a : 配列 arrayを意味している
補足:declare について
* 詳細は、以下のサイトを参照のこと
https://atmarkit.itmedia.co.jp/ait/articles/1905/30/news017.html
サンプル
declare -a array=( "Hello" "World" "!!!" ) for value in ${array[@]}; do echo "Result ${value}" done # 出力結果 # # $ ./sample.sh # Result Hello # Result World # Result !!!
2)要素の追加
* 「array+=("追加する値")」で追加する
サンプル
#!/bin/bash local array=() array+=("Hello") array+=("World") array+=("!!!") for value in ${array[@]}; do echo ${value} done # [出力結果] # $ ./sample.sh # Hello # World # !!!
3)要素の削除
* 「unset array[1]」で削除する
サンプル
#!/bin/bash local array=() array+=("Hello") array+=("World") array+=("!!!") # Remove unset array[1] for value in ${array[@]}; do echo ${value} done
4)関数の引数・戻り値
* 引数の場合は、「shift」を使う => 詳細は、以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2021/07/11/000421
* 戻り値の場合、「echo ${return_values[@]}」のように返し 「results=(`func`)」のように受け取る => 以下のサイトが参考になる。
http://labs.opentone.co.jp/?p=5890
サンプル
#!/bin/bash function sample_function() { local value1=${1} shift local values2=($@) local return_values=(${value1}) for value in ${values2[@]}; do return_values+=(${value}) done echo ${return_values[@]} } arg_value="Hi" arg_array=("Hello" "World" "!!!") results=(`sample_function ${arg_value} ${arg_array[@]}`) for result in ${results[@]} do echo ${result} done # [出力結果] # $ ./sample.sh # Hi # Hello # World # !!!
5)配列のソート
* 以下のサンプルのように「sort」コマンドを使う => 「sort」コマンド については、以下のサイトを参照。
https://atmarkit.itmedia.co.jp/ait/articles/1611/09/news020.html
サンプル
#!/bin/bash sorted_file_list=(`for sql_file in ./*.sql; do echo "$sql_file"; done | sort`) for target_file_path in ${sorted_file_list[@]}; do echo "target_file_path = ${target_file_path}" done # [出力例] # target_file_path = ./sample.sql # target_file_path = ./sample_ex1.sql # target_file_path = ./sample_ex2.sql # target_file_path = ./sample_ex3.sql echo "*************" # 逆順 -r sorted_file_list=(`for sql_file in ./*.sql; do echo "$sql_file"; done | sort -r`) for target_file_path in ${sorted_file_list[@]}; do echo "target_file_path = ${target_file_path}" done # [出力例] # target_file_path = ./sample_ex3.sql # target_file_path = ./sample_ex2.sql # target_file_path = ./sample_ex1.sql # target_file_path = ./sample.sql
【2】連想配列 - ディクショナリ
* 連想配列(Associative arrays) => Pythonでいうdict。JavaでいうMapみたいなキー・値型 => 詳細は以下の関連記事を参照。
シェル ~ 基本編 / 連想配列 - ディクショナリ ~
https://dk521123.hatenablog.com/entry/2021/09/11/000000
参考文献
https://qiita.com/b4b4r07/items/e56a8e3471fb45df2f59
https://atmarkit.itmedia.co.jp/ait/articles/1905/22/news004.html
関連記事
シェル ~入門編~
https://dk521123.hatenablog.com/entry/2014/10/23/005406
シェル ~ 基本編 / 連想配列 - ディクショナリ ~
https://dk521123.hatenablog.com/entry/2021/09/11/000000
シェル ~ 基本編・構文全般 ~
https://dk521123.hatenablog.com/entry/2015/02/20/001600
シェル ~ 基本編・条件分岐 if / case ~
https://dk521123.hatenablog.com/entry/2015/05/01/000043
シェル ~ 基本編・関数 ~
https://dk521123.hatenablog.com/entry/2015/03/17/233124
シェル ~ 基本編・引数あれこれ ~
https://dk521123.hatenablog.com/entry/2021/07/11/000421
シェルで部分一致(前方一致・後方一致)
https://dk521123.hatenablog.com/entry/2020/09/01/000000