bash shell 中的数组

 

简介

  bash shell 提供了两种一维数组,分别是 index array 和 associative array,常见的翻译是索引数组和关联数组。任何变量都可以用作数组,也就是说如果你使用了数组赋值的语法操作变量(name[subscript]=value),则变量默认会转换为索引数组。同时你也可以使用declare显示地定义数组。比如declare -a array。

index array 和 associative array 的区别

  <1> 定义方式不同

    index  array, 可以是自动生成或者显示指定变量为数组: declare -a index_array

    associative array, 必须显示指定变量为关联数组: declare -A associative_array

  <2> index array 的下标必须是大于0的数字或者可以计算出大于0数字的逻辑表达式,而associative array 的下标可以是字符串

    

    输出了以下结果,可以看到index array的下标0的值被覆盖了一次。如果脚本设置了 set -u, 那么给index array 下标使用字符串这种操作还会导致脚本报错并且停止。

    

 

基本使用方法

  对于 index array 和 associative array 的使用,只需要注意 index array 的 key 不要使用字符串即可。当然也不是绝对不可以使用,只不过会出现上面描述的错误而已。

  <1> 初始化

    对于 index array    name=(value1 value2 value3)

    对于 associative array     name=([key1]=value1  [key2]=value2   [key3]=value3)

  <1> 获取数组元素个数

    elem_count=${@name[@]}

  <2> 引用数组中的元素

    value=${name[$key]}

  <3> 数组元素赋值

    name[$key]=value

  <4> 输出所有的键

    keys=${!name[*]}  或者  keys=${!name[@]}

  <5> 输出所有的值

     values=${name[*]} 或者 values=${name[@]}

  <6> 删除数组元素

    unset name[$index]   删除某个元素

    unset name  删除整个数组

  <7> 获取数组的一部分

    注意这个功能只有 index array 适用

    ${name:0:3}

    0是起始下标,3是元素个数。获取从下标0开始的3个元素。

    如果起始下标超过元素个数,则什么也不会输出

    如果起始下标是负数,则会输出错误的字符串(为什么这么输出我没有去研究,有兴趣可以试下)

  <8> 连接2个数组

    注意只有 index array 可以这样操作,如下面的代码

    

    输出:

     

  <9> 遍历数组以及使用 * 和 @ 的区别

    看以下代码:

    

    输出如下:

    

    使用 * 和 @, 只有二者被双引号包围起来的时候才会有区别。可以使用 * 的时候,解释出的东西会被当成一个字符串,可以看到遍历的时候数组中所有的键被IFS的第一个字符(空格)隔开,并当成一个字符串输了出来。但是使用@,每个键则会被单独解释。这个规则对于数组的值来说也是一样的。遍历数组的时候这里需要特别注意一下。

 

其他的使用技巧

  declare 命令对变量设置属性也可以和数组配合起来使用,declare设置的变量属性会作用于数组的每一个值上。如以下代码,设置数组中每个值为只读:

  

  输出:

  

  也可以使用 -i 设置值必须为整数,使用-u设置值里面所有的字母都必须为大写等等。

 

  

 

转载于:https://www.cnblogs.com/MyOnlyBook/p/9419521.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值