zoukankan      html  css  js  c++  java
  • 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设置值里面所有的字母都必须为大写等等。

      

  • 相关阅读:
    zoj 3279 线段树 OR 树状数组
    fzu 1962 树状数组 OR 线段树
    hdu 5057 块状链表
    hdu3487 Play with Chain
    bzoj 1588营业额统计(HNOI 2002)
    poj2823 Sliding Window
    poj2828 Buy Tickets
    poj2395 Out of Hay
    poj3667 Hotel
    poj1703 Lost Cows
  • 原文地址:https://www.cnblogs.com/MyOnlyBook/p/9419521.html
Copyright © 2011-2022 走看看