21
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bash で配列、連想配列をシェル関数の引数として渡す

Last updated at Posted at 2018-11-21

本投稿について

説明すること

  • bash で declare コマンドを使用して配列や連想配列を宣言する方法
  • 配列や連想配列をシェル関数の引数として渡す方法

※declare による名前参照を使用するため bash 4.3 以降でしか動作しません。

説明しないこと

  • 配列や連想配列の細かい操作
  • 配列、連想配列、名前参照以外の declare コマンドの使用方法

使用するコマンド

ここでは declare コマンドを使用します。
declare は bash で変数を宣言したり、変数に属性を与えたりするためのコマンドです。
declare コマンドの使い方は man bash にて以下のように記載されています。

declare [-aAfFgilnrtux] [-p] [name[=value] ...]

ここで使用するオプションは以下のものです。

オプション 説明
-a 配列変数を宣言
-A 連想配列変数を宣言
-n 変数の名前参照を行う
-p 変数の属性と値の表示

配列変数、連想配列変数の宣言

bash で declare コマンドを使用することで配列変数や連想配列変数を宣言することができます。

配列変数の宣言

declare コマンドを使用して配列宣言をする場合は以下のようにします。

declare -a array=("1" "2" "3")

declare -p を使用すると変数の内容を表示できます。

declare -p array

結果は以下のように表示されます。

declare -a array=([0]="1" [1]="2" [2]="3")  

${array[@]} で配列の全要素が参照できます。

echo ${array[@]}

結果は以下のように表示されます。

1 2 3

連想配列の宣言

declare コマンドを使用して配列宣言をする場合は以下のようにします。

declare -A hash=(["a"]="A" ["b"]="B" ["c"]="C")

declare -p を使用すると変数の内容を表示できます。

declare -p hash

結果は以下のように表示されます。

declare -A hash=([a]="A" [b]="B" [c]="C" )

${hash[@]} で連想配列の全要素が参照できます。

echo ${hash[@]}

結果は以下のように表示されます。

A B C

${!hash[@]} で連想配列の全キーが参照できます。

echo ${!hash[@]}

結果は以下のように表示されます。

a b c

配列、連想配列をシェル関数の引数として渡す

シェル関数の引数はコマンドラインと同様の形式で渡されるらしく通常は配列や連想配列を引数として渡すことはできないようです。
ですが、シェル関数内で引数に対して declare -n を使用して名前参照することで引数に渡した配列や連想配列をシェル関数内で参照することが可能となります。

ここでは先ほど宣言した連想配列 hash を使用します。
※配列の場合は同様のため説明しません。

# 第1引数を連想配列として参照し各要素の値を表示する関数
print_hash_val()
{
        declare -n ref=$1
        for val in ${ref[@]};
        do
                echo "val = $val"
        done
}

# 連想配列変数を宣言
declare -A hash=(["a"]="A" ["b"]="B" ["c"]="C")

# シェル関数を呼び出して hash の各要素を表示
print_hash_val hash

結果は以下のように表示されます。

val = A
val = B
val = C
21
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?