• 【002】数组少不了


    1. 数组

    无论是高级语言,还是低级脚本语言,都离不开数组概念。Shell脚本中也同样有数组,所谓数组:“即能够存储多个值的变量”。这些值可以单独引用,也可以作为整个数组使用。数组大小没有最大限制,也没有要求连续索引或分配成员变量。

    1.1 定义数组

    定义一个数组的语法如下:

    array_name=(value1 value2 value3 value4 value5 ...)
    
    • 1

    首先是一个数组名,其命名规则遵循【001】变量知多少 中第2节所描述的。然后紧接着是一个等号(=),注意这里数组名和等号之间同样不能有空格符号,然后是一对括号,括号里面是数组的值,可以有若干个,各value之间以空格符号分隔。

    1.1.1 值是数值

    如下示例,定义了一个array数组变量,其值为“1234567”。通过echo将其数组变量一一打印出来。

    #!/bin/sh
    array=(1 2 3 4 5 6 7)
    echo "${array[*]}"
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    1.2.2 值是字符串

    上面的数组,其元素是数值;若元素是字符串,则需要对每个元素使用双引号括起来,如下:

    #!/bin/sh
    
    country=("This" "is" "China." "This" "is" "my" "country")
    echo ${country[*]}
    
    • 1
    • 2
    • 3
    • 4

    打印结果如下图所示:

    在这里插入图片描述

    1.2.3 值是字符串与数值混合

    Shell脚步中的数组,其元素值可以除了可以是统一数值、字符串外,还可以是这两个的混合。
    比如下面的other数组,其元素值列表由字符串,也有数值。我们只需要对字符串的值使用双引号括起来。

    other=("hello" 123)
    echo ${other[*]}
    
    • 1
    • 2

    打印结果:

    在这里插入图片描述

    2. 引用数组元素

    引用数组元素分为多种情形,比如引用指定的某个元素,引用数组变量中的所有元素等,下面将一一介绍这些情形。

    如果想通过${array_name}方式来输出数组变量array_name中的所有元素,是不生效的。它只会输出array_name中的第一个元素。

    如下图:
    在这里插入图片描述

    2.1 数组下标

    Shell脚步中的数组同样支持引用指定下标元素的功能,且数组下标是从0开始(这一点和C/C++中的数组下标从0开始相同)。比如上面的array数组变量,要引用数组元素3,则对应array数组变量中的下标为2。我们可以这样进行引用:

    echo "${array[2]}"
    
    • 1

    其打印结果如下图所示:

    在这里插入图片描述
    以此类推,引入数组元素6,则对应的下标是5,即:${array[5]}

    若引用的数组索引下标超过数组的范围,结果会怎样?参考下面的示例代码,第一个索引下标7已经超出了数组array的范围,后面的array[10]更不用说,其结果会怎样,我们执行看下现象。

    #!/bin/sh
    
    array=(1 2 3 4 5 6 7)
    echo $array[7]
    echo $array[10]
    echo $array[100]
    echo $array[1000]
    echo $array[10000]
    echo $array[100000]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    可以看到,Shell脚步中索引超出数组范围不会导致Shell脚步core掉,但是得到的结果是不正确的,如下图所示:

    在这里插入图片描述
    因此,在使用数组的时候,一定要数组,不要让索引下标越界。

    2.2 修改指定索引的值

    我们可以通过索引下标的方式,对Shell脚步中数组的指定元素的值进行修改。如下所示:

    #!/bin/sh
    
    country=("This" "is" "China." "This" "is" "my" "country")
    echo ${country[*]}
    country[5]="our"
    echo ${country[*]}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    修改country数组中下标为5(也就是数组元素“my”)的元素为“our”,然后重新打印该数组:

    在这里插入图片描述

    2.3 遍历数组

    Shell脚步同样支持类似C/C++中的forwhile等循环语句,因此,可以借助这些语句循环遍历打印数组中的所有元素,由于这里还没有介绍forwhile。所以本节内容在后面介绍循环语句时候会重点进行讲解。

    我们可以在不使用循环语句(如forwhile等)情况下,同样输出数组的所有元素,那就是通过下标的方式,搭配通配符(*),来达到效果。如:
    ${array_name[*]} #这里的索引不使用具体值,而是使用一个通配符号(*)。

    2.4 删除数组元素

    【001】变量知多少2.6节中有介绍过使用unset命令来删除变量,同样可以使用该命令来删除数组指定索引下标的元素,或数组中的所有元素。

    2.4.1 删除数组索引元素

    要删除数组中指定索引下标对应的元素,其语法是:unset array_name[index]。即unset后面直接是数组名和指定索引下标。
    在这里插入图片描述

    2.4.2 删除数组所有元素

    要删除数组变量中的所有元素,则需借助通配符(*)完成,其格式是:unset array_name[*]

    在这里插入图片描述

    3. 总结

    本节详细介绍了Shell脚步中数组的功能,从如何定义数组,到引用数组元素,到删除数组元素等等。通过本文的学习,能够完全掌握Shell中的数组定义和使用。

  • 相关阅读:
    案例推荐|助力智慧城市,Pulsar Functions 的边缘物联网场景实践
    chatgpt赋能python:Python逆序遍历-解决问题的神奇方式
    java 企业工程管理系统软件源码 自主研发 工程行业适用
    【算法】加密解密算法(DES、3DES、SM2、SM3、SM4)以及RSA加密算法
    2022高教社杯辅导 答疑 选题 代码 思路 全国大学生数学建模竞赛
    LeetCode_格雷编码_中等_89.格雷编码
    【Vue面试题四】、Vue实例挂载的过程中发生了什么?
    使用gitbook快速搭建文档中心
    PyQt5 QSS的UI美化
    文件系统深入
  • 原文地址:https://blog.csdn.net/lixiaogang_theanswer/article/details/126718485