zoukankan      html  css  js  c++  java
  • bash脚本中的普通数组和关联数组

    1. 普通数组

      bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。

      1.1 定义数组

      在Shell中,用括号来表示数组,数组元素用“空格”符号分割开。定义数组的一般形式为:
        array_name=(value1 ... valuen)

      

        array_name=(value0 value1 value2 value3)
    
        array_name=(
        value0
        value1
        value2
        value3
        )

      还可以单独定义数组的各个分量:

        array_name[0]=value0
        array_name[1]=value1
        array_name[2]=value2

      可以不使用连续的下标,而且下标的范围没有限制。

      1.2 读取数组

    读取数组元素值的一般格式是:
        ${array_name[index]}
    例如:

    1. valuen=${array_name[2]}

    举个例子:

      

        #!/bin/sh
        NAME[0]="Zara"
        NAME[1]="Qadir"
        NAME[2]="Mahnaz"
        NAME[3]="Ayan"
        NAME[4]="Daisy"
        echo "First Method: ${NAME[*]}"
        echo "Second Method: ${NAME[@]}"
     

    运行脚本,输出:

    $./test.sh
    First Index: Zara
    Second Index: Qadir

    使用@ 或 * 可以获取数组中的所有元素,例如:

      

        ${array_name[*]}
        ${array_name[@]}

      举个例子:

      

        #!/bin/sh
        NAME[0]="Zara"
        NAME[1]="Qadir"
        NAME[2]="Mahnaz"
        NAME[3]="Ayan"
        NAME[4]="Daisy"
        echo "First Method: ${NAME[*]}"
        echo "Second Method: ${NAME[@]}"

      运行脚本,输出:

    $./test.sh
    First Method: Zara Qadir Mahnaz Ayan Daisy
    Second Method: Zara Qadir Mahnaz Ayan Daisy

      1.3获取数组的长度

    获取数组长度的方法与获取字符串长度的方法相同,例如:
        # 取得数组元素的个数
        length=${#array_name[@]}
        # 或者
        length=${#array_name[*]}
        # 取得数组单个元素的长度
        lengthn=${#array_name[n]}

    2. 关联数组

      shell 提供了另外一种数组,其可以使用任意的字符串作为下标(不必是整数)来访问数组元素。这种数组叫做关联数组(associative array)。
    关联数组的下标和值称为键值对,它们是一一对应的关系。在关联数组中,键是唯一的,值可以不唯一。
    shell 的关联数组和 perl 的关联数组在实现功能上是一样的。在 perl 中,关联数组有时候称为哈希(hash)。

      2.1 定义关联数组
    shell 的关联数组和 shell 的下标数组在定义和使用上完全一样,只是在索引上有区别。
    需要注意的是,在使用关联数组之前,需要使用命令 declare -A array 进行显示声明。

      

    #!/bin/bash
    name=(jim tom lucy)
    
    declare -A phone
    phone=([jim]=135 [tom]=136 [lucy]=158)
    
    for i in `eval echo {0..$((${#name[*]}-1))}`
    do
        echo ${name[i]} phone number is ${phone["${name[i]}"]}
    done

      在命令提示符下输入 ./test.sh,执行结果如下:
      jim phone number is 135
      tom phone number is 136
      lucy phone number is 158

      2.2 关联数组的读取和求长度和普通的数组方法一样

    复制运行脚本,输出:
  • 相关阅读:
    三极管8050和8550对管的参数
    三极管9014 管脚
    水深不语,人稳不言
    编译结果分析
    三母运算符
    C语言关键词解释
    51定时器初值的计算
    聪明人都在远离手机虚假繁荣的“人脉”关系
    每段路,都是一种领悟
    你的灯亮着吗读后感二
  • 原文地址:https://www.cnblogs.com/linux-wangkun/p/5421800.html
Copyright © 2011-2022 走看看