「シェルスクリプトの基礎 - 配列」の版間の差分
(→連想配列) |
|||
| 156行目: | 156行目: | ||
連想配列の定義は、<code>declare -A <配列名></code>と記述する。<br> | 連想配列の定義は、<code>declare -A <配列名></code>と記述する。<br> | ||
例えば、連想配列arrayを定義する場合は、<code>declare -A array</code>と記述する。<br> | 例えば、連想配列arrayを定義する場合は、<code>declare -A array</code>と記述する。<br> | ||
通常の配列は、<code>declare -a <配列名></code>と記述する。通常の変数は、<code>declare <変数名></code>とする。<br> | |||
<br> | <br> | ||
連想配列の値は、<code>連想配列名[キー]=値</code>と記述する。<br> | |||
例えば、連想配列arrayにおいて、キーhogeに値10を代入する場合、<code>array["hoge"]=10</code>と記述する。<br> | |||
引用符<code>""</code>または<code><nowiki>''</nowiki></code>を省略して、<code>array[hoge]=10</code>と記述してもよい。<br> | |||
<br> | |||
値の参照は、通常の配列と同様に<code>${array["hoge"]}</code>と記述する。ここでも、引用符""は省略できる。<br> | |||
for文で配列の値を全て参照する場合も、通常の配列と同様、<code>for <変数名> in ${配列名[@]}</code>と記述できる。<br> | |||
<br> | |||
全てのキーの値を参照する場合、配列名の前に<code>!</code>記号を付加して、<code>for <変数名> in ${!配列名[@]}</code>と記述する。<br> | |||
<br> | <br> | ||
以下の例では、連想配列arrayを定義して、hoge、piyo、fugaの点数を保存している。<br> | |||
1つ目のfor文では、全員の値を順次表示して、2つ目のfor文では、全員の名前と値(キーと値)を表示している。<br> | |||
<syntaxhighlight lang="sh"> | <syntaxhighlight lang="sh"> | ||
#!/bin/sh | #!/bin/sh | ||
declare -A array | declare -A array | ||
array["hoge"]=10 | array["hoge"]=10 | ||
array["piyo"]=20 | array["piyo"]=20 | ||
array["fuga"]=30 | array["fuga"]=30 | ||
for | for VALUE in ${array[@]} | ||
do | do | ||
echo $ | echo "$VALUE" | ||
done | done | ||
for | |||
do | echo "" | ||
for KEY in ${!array[@]} | |||
done | do | ||
echo "key : $KEY" | |||
echo "value : ${array[$KEY]}" | |||
done | |||
# 出力 | |||
10 | |||
20 | |||
30 | |||
key : hoge | |||
value : 10 | |||
key : piyo | |||
value : 20 | |||
key : fuga | |||
value : 30 | |||
</syntaxhighlight> | |||
<br><br> | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:シェルスクリプト]] | [[カテゴリ:シェルスクリプト]] | ||
2020年11月17日 (火) 18:55時点における版
概要
シェルスクリプトにおいて、配列を使用する方法を記載する。
配列の定義
配列を定義するには、以下のように記述する。
array[0]=a
array[1]=b
array[2]=c
または、以下のように記述する。
array=(a b c)
配列の基本
以下の例では、0〜3番目(2番目を除く)までの要素の配列を定義した後、各要素と配列全体を出力している。
#!/bin/sh
array[0]=a
array[1]=b
array[3]=d
# 0番目の要素を参照する
echo "$array"
# 1番目の要素を参照する
echo "$array[1]"
# 2番目の要素は存在しないので空文字となる
echo "$array[2]"
# 3番目の要素を参照する
echo "$array[3]"
# 全要素を参照する
echo "$array[@]"
# 出力
a
b
d
a b d
配列の要素の追加
配列に要素を追加する場合、新たな添字を指定して値を代入する。
また、配列に配列を追加する場合、+=を使用して配列名+=(値 値 値...)のように記述する。
#!/bin/bash
array=(a b c d)
# 配列arrayの4番目の要素に代入
array[4]=e
# 配列arrayの末尾に要素を代入
array+=(f g)
# 配列arrayの末尾に要素を代入(ただし、添字が0から1ずつ値が存在する場合のみ可能)
array[${#array[@]}]=h
for i in ${!array[@]}
do
echo $i ${array[$i]}
done
# 出力
a
b
c
d
e
f
g
h
配列の要素の削除
以下の例では、配列を定義した後、unsetコマンドにより0番目の要素を削除している。
#!/bin/sh
array[0]=a
array[1]=b
unset array[0]
echo "$array[@]"
# 出力
b
配列の表示
配列の要素数を表示するには、${#変数名[@]}を使用する。
#!/bin/sh
array=(a b c d)
echo "${#array[@]}"
# 出力
4
配列と繰り返し
以下の例では、括弧()を使用して配列を定義した後、for文を使用して配列の要素を出力している。
#!/bin/sh
array=(a b c d)
for e in $array[@]
do
echo "element = $e"
done
# 出力
element = a
element = b
element = c
element = d
また、以下のように記述することもできる。
#!/bin/sh
array=(a b c d)
for ((i=0; i<${#array[@]}; i++))
do
echo "element = $array[i]"
done
# 出力
element = a
element = b
element = c
element = d
連想配列
連想配列の定義は、declare -A <配列名>と記述する。
例えば、連想配列arrayを定義する場合は、declare -A arrayと記述する。
通常の配列は、declare -a <配列名>と記述する。通常の変数は、declare <変数名>とする。
連想配列の値は、連想配列名[キー]=値と記述する。
例えば、連想配列arrayにおいて、キーhogeに値10を代入する場合、array["hoge"]=10と記述する。
引用符""または''を省略して、array[hoge]=10と記述してもよい。
値の参照は、通常の配列と同様に${array["hoge"]}と記述する。ここでも、引用符""は省略できる。
for文で配列の値を全て参照する場合も、通常の配列と同様、for <変数名> in ${配列名[@]}と記述できる。
全てのキーの値を参照する場合、配列名の前に!記号を付加して、for <変数名> in ${!配列名[@]}と記述する。
以下の例では、連想配列arrayを定義して、hoge、piyo、fugaの点数を保存している。
1つ目のfor文では、全員の値を順次表示して、2つ目のfor文では、全員の名前と値(キーと値)を表示している。
#!/bin/sh
declare -A array
array["hoge"]=10
array["piyo"]=20
array["fuga"]=30
for VALUE in ${array[@]}
do
echo "$VALUE"
done
echo ""
for KEY in ${!array[@]}
do
echo "key : $KEY"
echo "value : ${array[$KEY]}"
done
# 出力
10
20
30
key : hoge
value : 10
key : piyo
value : 20
key : fuga
value : 30