成功最有效的方法就是向有经验的人学习!

关联数组示例

Bash从4.0的版本开始就可以使用关联数组了

关联数组的下标可以采用非整型类型,类似于java中的key-value类型,其中,key为下标,value为对应的元素的值,key唯一,value可以不唯一。

使用关联数组前应该先声明 declare -A array

然后就可以像使用普通数组一样使用关联数组了,如下所示:
[root@gitlab ~]# declare -A guilin
[root@gitlab ~]# guilin[“name”]=”chenguilin”
[root@gitlab ~]# guilin[“sex”]=”男”
[root@gitlab ~]# guilin[“age”]=”25″

遍历数组下标,我知遍历数组的元素值使用的是${guilin[*]} 那么我们取反${!guilin[*]} 不就是下标吗

[root@gitlab ~]# for key in ${!guilin[*]}; do echo $key; done;
name
age
sex

遍历数组元素的值

[root@gitlab ~]# for key in ${guilin[*]}; do echo $key; done;
chenguilin
25
男

其他使用方法:

echo ${!guilin[*]}   #取关联数组所有键
echo ${!guilin[@]}  #取关联数组所有键
echo ${guilin[*]}       #取关联数组所有值
echo ${guilin[@]}      #取关联数组所有值
echo ${#guilin[*]}  #取关联数组长度
echo ${#guilin[@]} #取关联数组长度

在为关联数组赋值时,不加”$”,而是直接 guilin[“name”]=chenguilin ,在取值的时候,要加”$”,如 $guilin[“sex”] 则得到的是男
清空数组元素 unset guilin[“sex”] ,但是这样清空后,array中仍有“sex”这个key,只是其对应的值被清空了

清空整个数组 unset guilin,但是这样清空后,guilin的key是没有了,但是整个guilin也不能再用了,如下所示:

declare -A guilin
guilin["chenguilin"]=chenguilin
unset guilin
guilin["sex"]=25

则会出错:语法错误,也就是在unset guilin之后,该guilin不再是关联数组,所以key不可以用非整型来做索引
所以我只能如下解决:

declare -A guilin
guilin["sex"]=25
unset guilin
[root@gitlab ~]# declare -A guilin
[root@gitlab ~]# guilin["sex"]=25
[root@gitlab ~]# echo ${guilin["sex"]}
25

判断某一个key是否在该关联数组中,如下所示:

function isInCountResult(){
for key in ${!count_result[*]}
do
  if [ "$1" = "$key" ]
  then
    return 0
  fi
done
return 1
}

这里需要注意,shell脚本中的if判断中,返回0为true,返回1为false
关于使用shell的普通数组:

把数组当做参数在函数之间传递时,在一个帖子里看到如下的方法:

function f1(){
declare -a array
array[0]="h1"
array[1]="h2"
arr=`echo "${array[*]}"`
local val="h1"
f2 $val $arr
}



function f2(){
local arr2=`echo "$2"`
for value in ${arr2[*]}
do
   echo "value: $value"
done
}

但是运行完,发现只是传递了array中的第一个值,即h1,
如果使用f2 $val “${array[*]}”, 传递的仍然是第一个值,最后还是没有找到办法能把整个数组传递过去

在使用unset 删除普通数组元素是,例如unset array[0] 其实删除的只是对应的值,但是array[0]这个位置仍然在,原来的array[1]现在仍是array[1],而不会变为array[0]

赞(0) 打赏
未经允许不得转载:陈桂林博客 » 关联数组示例
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册