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 关联数组的读取和求长度和普通的数组方法一样

    复制运行脚本,输出:
  • 相关阅读:
    java锁类型
    Java线程池
    1 Navicat12 过期了怎么办
    N1-二维数组查找
    SQL-59 按照salary的累计和running_total,其中running_total为前两个员工的salary累计和,其他以此类推。
    SQL-58 获取有奖金的员工相关信息。
    SQL-57 使用含有关键字exists查找未分配具体部门的员工的所有信息。
    SQL-56 获取所有员工的emp_no、部门编号dept_no以及对应的bonus类型btype和recevied,没有分配具体的员工不显示
    SQL-55 分页查询employees表,每5行一页,返回第2页的数据
    SQL-54 查找排除当前最大、最小salary之后的员工的平均工资avg_salary。
  • 原文地址:https://www.cnblogs.com/linux-wangkun/p/5421800.html
Copyright © 2011-2022 走看看