MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
シェルスクリプトの基礎 - 配列のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
シェルスクリプトの基礎 - 配列
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == シェルスクリプトにおいて、配列を使用する方法を記載する。<br> <br><br> == 配列の定義 == 配列を定義するには、以下のように記述する。<br> <syntaxhighlight lang="sh"> array[0]=a array[1]=b array[2]=c </syntaxhighlight> <br> または、以下のように記述する。<br> <syntaxhighlight lang="sh"> array=(a b c) </syntaxhighlight> <br><br> == 配列の基本 == 以下の例では、0〜3番目(2番目を除く)までの要素の配列を定義した後、各要素と配列全体を出力している。<br> <syntaxhighlight lang="sh"> #!/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 </syntaxhighlight> <br><br> == 配列の要素の追加 == 配列に要素を追加する場合、新たな添字を指定して値を代入する。<br> また、配列に配列を追加する場合、<code>+=</code>を使用して配列名<code>+=(値 値 値...)</code>のように記述する。<br> <syntaxhighlight lang="sh"> #!/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 # 出力 0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h </syntaxhighlight> <br><br> == 配列の要素の削除 == 以下の例では、配列を定義した後、<code>unset</code>コマンドにより0番目の要素を削除している。<br> <syntaxhighlight lang="sh"> #!/bin/sh array[0]=a array[1]=b unset array[0] echo "$array[@]" # 出力 b </syntaxhighlight> <br><br> == 配列の要素数の表示 == 配列の要素数を表示するには、<code>${#変数名[@]}</code>を使用する。<br> <syntaxhighlight lang="sh"> #!/bin/sh array=(a b c d) echo "${#array[@]}" # 出力 4 </syntaxhighlight> <br><br> == 配列と繰り返し == 以下の例では、括弧<code>()</code>を使用して配列を定義した後、<code>for</code>文を使用して配列の要素を出力している。<br> <syntaxhighlight lang="sh"> #!/bin/sh array=(a b c d) for e in $array[@] do echo "element = $e" done # 出力 element = a element = b element = c element = d </syntaxhighlight> <br> また、以下のように記述することもできる。<br> <syntaxhighlight lang="sh"> #!/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 </syntaxhighlight> <br><br> == 連想配列 == 連想配列の定義は、<code>declare -A <配列名></code>と記述する。<br> 例えば、連想配列arrayを定義する場合は、<code>declare -A array</code>と記述する。<br> 通常の配列は、<code>declare -a <配列名></code>と記述する。通常の変数は、<code>declare <変数名></code>とする。<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> 以下の例では、連想配列arrayを定義して、hoge、piyo、fugaの点数を保存している。<br> 1つ目のfor文では、全員の値を順次表示して、2つ目のfor文では、全員の名前と値(キーと値)を表示している。<br> <syntaxhighlight lang="sh"> #!/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 </syntaxhighlight> <br><br> == 連想配列の値の変更 == 連想配列において、既存のキーを指定して値を代入する場合は値の変更、新しいキーを指定して値を代入する場合は値の追加となる。<br> <br> <syntaxhighlight lang="sh"> #!/bin/sh declare -A array array["hoge"]=10 array["piyo"]=20 array["fuga"]=30 for KEY in ${!array[@]} do echo "key : $KEY" echo "value : ${array[$KEY]}" done echo "== Change ==" array["hoge"]=400 #キーhogeの値の変更 array["piyo"]=500 #キーpiyoと値の追加 for KEY in ${!array[@]} do echo "key : $KEY" echo "value : ${array[$KEY]}" done # 出力 key : hoge value : 10 key : piyo value : 20 key : fuga value : 30 ==change== key : hoge value : 400 key : piyo value : 500 key : fuga value : 30 </syntaxhighlight> <br><br> == 連想配列に値をまとめて代入 == 連想配列に値をまとめて代入する場合、<code>配列名=([キー]=値 [キー]=値)</code>のように、キーと値のペアで代入する。<br> 連想配列の末尾にキーと値を追加する場合は、<code>+=</code>を使用して<code>配列名+=([キー]=値 [キー]=値)</code>と記述する。<br> <syntaxhighlight lang="sh"> # 連想配列arrayを定義 declare -A array # 連想配列arrayに値を代入 array=(["hoge"]=10 ["piyo"]=20 ["fuga"]=30) for KEY in "${!array[@]}" do echo "$KEY ${array[$KEY]}" done # 連想配列arrayの末尾にキーと値をまとめて代入 array+=(["hoge"]=15 ["foo"]=40) for KEY in "${!array[@]}" do echo "$KEY ${array[$KEY]}" done # 出力 hoge 10 piyo 20 fuga 30 piyo 20 fuga 30 hoge 15 # キーhogeの値が変更される foo 40 # キーfooと値が追加される </syntaxhighlight> <br><br> == 連想配列のコピー == 連想配列のコピーは、個々のキーと値をコピーする必要がある。<br> なお、この方法は、連想配列ではない通常の配列にも使用できる。<br> <syntaxhighlight lang="sh"> declare -A array1 declare -A array2 # 連想配列array1の定義 array1["NG"]="red" array1["OK"]="green" # 連想配列array2に連想配列array1をコピー for i in ${!array1[@]} do array2[$i]=${array1[$i]} done echo ${array1[@]} # array1のキーと値(redとgreen)が表示される echo ${array2[@]} # 上と同じ内容が表示される echo ${!array1[@]} # 連想配列array1のキー(NGとOK)が表示される echo ${!array2[@]} # 上と同じ内容が表示される echo ${array1["NG"]} # redが表示される echo ${array2["OK"]} # greenが表示される declare -a week1 # 通常の配列week1を定義 declare -a week2 # 通常の配列week2を定義 week1=(Sun Mon Tues Wed Thur Fri Sat) # 通常の配列のコピー for i in ${!week1[@]} do week2[$i]=${week1[$i]}; done echo ${week1[@]} echo ${week2[@]} </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:シェルスクリプト]]
シェルスクリプトの基礎 - 配列
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse