shell 数组

 普通数组

  1. 常规定义
num=(1 2 3)
num[3]=4;num[4]=5

或者

str1=('a' 'b' 'c')/str1=(a b c)
str2[0]=a
str2[1]='b'
str2[5]=d
str2[3]=c

备注:在使用形如str[0]=1定义数组是,数组的下标值可以不是连续的正整数,元素的顺序按照下标的升序排列,数组的长度由实际包含的元素个数决定,不受下标值的影响。echo ${str2[0]};echo ${str2[5]的值为a decho ${str[2]}的值为空。

特殊定义

for num in 1 2 3 4 5
do
 echo "num is: ${num}"
done
str="a,b,c"
OLD_IFS="$IFS"
IFS=","
arr=($str)
IFS="$OLD_IFS"`

此时arr数组的值为a b c
或者是:str="m,n";IFS=",";arr=($str),也能按照","对字符串进行分割。与上一条的区别是,上一条更改了IFS的默认值,之后又改了回去,但是第3条没有改回去。IFS的默认值为空格、teb或换行。详细的分析见:参考文章

  1. 在for循环中,也可以直接声明并使用数组
  2. 使用自定义的分隔符分割

关联数组

bash从4.0版本支持关联数组的使用,使用方式类似高级语言的Map数组。

声明关联数组
declare -A user

 

定义数组

user[name]='jack'
user[age]=18

或者user=([name]='jack' [age]=18)
此时echo ${user[name]};echo ${user[age]}的结果是jack 18

  1. 备注
    1. 如果不声明数组为关联数组,user["name]="jack;user["sex"]="M",结果数组的长度为1,user["name"]的值会被user["sex"]的值覆盖。echo $user["name"];echo $user["sex"]的值为M M.
    2. 数字下标也支持字符型的。num["1"]="111"num[1]="111"是等效的,并且字符型数字做下标不会有上一条的现象,num["1"]=1;num["2"]=2;num["3"]=3,数组num的长度为3。

---

2. 数组的遍历

2.1 for循环

  1. 高级语言的形式
for((i=0;i<${#num[@]};i++))
do
 echo "num is: ${num[i]}"
done
  1. foreach形式
for nu in ${num[*]}
do
 echo "num is: $nu"
done

其中,${num[*]${num[@]效果相同

2.2 while

i=0
while [ $i -lt ${#num[@]} ]
do
 echo "num is: ${num[$i]}"
 echo "i is: $i"
 i=`expr $i + 1`
done 

备注:i的自增还可以使用i=$[$i+1]let "i+=1"i=$(($i+1))。具体的shell运算规则请参考xxx.

 until

i=0
until [ $i -ge ${#num[*]} ]
do
 echo "num is: ${num[$i]}"
 i=`expr $i + 1`
done

 对关联数组的遍历

  1. for循环遍历
for u in ${!user[@]}
do
 echo "user's ${u} is : ${user[$u]}
done

结果是:

user's name is : jack
user's age is : 18

备注:#{!user[@]}获取的是关联数组的所有下标值组成的数组

3. 数组增加元素

  1. 添加单个元素
    1. 添加元素到数组头
    num=(3 ${num[@]})
    此时num的值为3 1 2 3 4 5
    1. 添加元素到数组尾
    num=(${num[@]} 6)
    此时num的值为3 1 2 3 4 5 6
    或者使用下标添加:num[${#num[@]}]=7,此时num的值为3 1 2 3 4 5 6 7
  2. 添加其他数组到数组
    类似于添加单个元素
    1. 添加其他数组到数组头abc=(11 22 33);num=(${abc[@]} ${num[@]})
    2. 添加其他数组到数组尾num=(${num[@]} ${abc[@]})

4. 数组更新元素值

  1. 使用下标值更新数组
    num[0]=22222或者num[0]=${abc[2]}
  2. 用一个数组更新单个值
    num[1]=${abc[@]}
    此时num中的一个值被abc数组替换,相当于删除下标为1的值,并从下标1开始添加若干个元素。

    5. 数组删除元素值

    unset num[1]或者unset user[name]

    6. 删除数组

    unset num

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值