通过declare -A array 声明关联数组后,可以通过 key in ${!array[@]} 获取数组索引。
注意:如果数组为 索引数据 ,则无法实现
数据的应用,统计相同key的属相(如分析日志中的相同ip地址)
#!/bin/bash
declare -A array
for((i=1;i<=100;i++))
do
key=$(($RANDOM % 10))
array[$key]=$((${array[$key]}+1))
done
echo '###########'
for key in ${!array[@]}
do
echo $key '=' ${array[$key]}
done
# 结果
# ###########
# 0 = 6
# 1 = 9
# 2 = 6
# 3 = 15
# 4 = 9
# 5 = 9
# 6 = 11
# 7 = 12
# 8 = 12
# 9 = 11
关联数组与索引数组的引用区别
#!/bin/bash
# 关联数组
declare -A arr
arr=( [1]=one [2]=two [3]=three ['a']=ONE ['b']=TWO ['c']=THREE )
for k in "${!arr[@]}"
do
echo $k '--' ${arr[$k]}
done
# 结果
# a -- ONE
# b -- TWO
# c -- THREE
# 1 -- one
# 2 -- two
# 3 -- three
#!/bin/bash
# 关联数组
declare -a arr
arr=( [1]=one [2]=two [3]=three ['a']=ONE ['b']=TWO ['c']=THREE )
for k in "${!arr[@]}"
do
echo $k '--' ${arr[$k]}
done
# 结果
# 0 -- THREE
# 1 -- one
# 2 -- two
# 3 -- three
个人觉得,关联数组与索引数组的组别在于:
1. 索引数组为默认声明数组,在通过${!array[@]}取得所以的时候,总是会获得索引0,即使不存在。且不会获得值为“字符串”的索引。
2. 关联数组通过 -A 声明,个人感觉而言,更像python中的字典。
参考:http://www.cnblogs.com/hopeworld/archive/2011/04/12/2013425.html