配列(連想配列)初期化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
bashの変数の間接参照を使う場合for key in NAME AGE SEX; do _key="USER_$key" echo ${!_key} done 変数の始めに!マークを付けると間接参照されて、USER_KEY(やUSER_AGE)が参照される。さらに間接参照は「*」でワイルドカードのようにマッチング出来る。これを使うと、 for key in ${!USER_*}; do _key=${key#*_} val=${!key} echo "$_key => $val" done のように、${!USER_*}で"USER_"から始まる変数名(すなわちUSER_NAME,USER_AGE,USER_SEX)を変数keyに取り出せて、この変数名を間接参照する(val=${!key}の部分)と、元の値(taro,20,man)を取り出せる。詳しくはman bashでparameter expansionを参考にする。 |
|