- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- シェルスクリプト/文法/配列(連想配列) へ行く。
配列(連想配列)
初期化
ARR[0]=1 ARR[1]=2 ARR[2]=3
または
ARR=(1 2 3)
コマンドの結果を配列に格納する
files=($(ls /tmp/))
1つの要素を参照
echo ${ARR[0]} # => 1 echo ${ARR[1]} # => 2 echo ${ARR[2]} # => 3
全要素を参照
echo ${ARR[@]} # => 1 2 3 for a in ${ARR[@]}; do echo $a # => 1(2,3,...) done
配列の大きさ
size=${#ARR[@]} # n = 3
ループの中で初期化
for i in 1 2 3; do n=${#ARR[@]} ARR[$n]=$i done echo ${ARR[@]} # => 1 2 3
配列に要素を追加(push)
ARR1=(1 2 3) ARR1=(${ARR1[@]} 0) echo ${ARR1[@]} # => 1 2 3 0
配列と配列をマージ
ARR1=(1 2 3) ARR2=(7 8 9) ARR1=(${ARR1[@]} ${ARR2[@]}) echo "${ARR1[@]}" # => 1 2 3 7 8 9
連想配列
初期化
USER_NAME=taro USER_AGE=20 USER_SEX=man
参照
for key in NAME AGE SEX; do val=$(eval 'echo $USER_'$key) echo $val # => taro(20,man) done
- 「連想配列名_キー名」のようなルールで変数を作る。
- ここでは連想配列名がUSER、キー名がNAME/AGE/SEX。
- 連想配列の値の取得は以下のようにして行っている。
- $()によるコマンド置換が行われる際に、$keyが展開されてNAMEやAGEのような文字列になる。
- 次にevalが実行される際に、'echo $USER'は展開されてecho $USERという文字列になり、事前に展開されていたNAMEやAGEと文字列連結され、echo $USER_NAMEやecho $USER_AGEがevalの引数になる。
- これでvalには$USER_NAMEや$USER_AGEの値が入る。