本文旨在复习Shell脚本编程中数组的定义和赋值、读取数组、以及获取数组的长度

知识储备


  • 数组:连续的多个独立的内存空间,每个内存空间相当于一个变量

  • 在逻辑上,我们看到的数组是“连续的”,但是映射到真实物理内存空间上是“杂乱的

  • bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

  • 数组2元素:数组名[索引],依据索引的不同可以分为以下2种

数组定义和赋值


Shell中,用括号来表示数组,数组元素用“空格”符号分割开。

定义数组的一般形式为:

1

array_name=(value1 value2 ... valueN)

赋值方式

(1)一次赋值一个元素

1

array[index]=value

(2)一次复制全部元素

1

array=("val1" "val2" ...)

(3)指定索引进行赋值

1

array=([0]="val1" [3]="val2")

(4)从用户交互式输入赋值

1

read -a array

读取数组[引用数组]


读取数组指定索引的元素值的一般格式是:

1

${array[index]}

还可以一次读取所有数组中元素

1

2

${array[*]}

${array[@]}

例1:输入5个数字,存入数组,引用该数组倒序输出这5个数字

代码实现

1

2
3
4
5
6
7
8
9
10
11

#!/bin/bash

for i in $(seq 0 4)
do 
    
read -p "Enter the 5 nums: " num
    Numarray[$i]=$num
done
for q in $(seq 4 -1 0)
do 
    echo ${Numarray[$q]}
done

获取数组长度


获取数组长度分为获取数组元素个数,还可以获取指定索引元素值的长度

获取数组元素的个数,一般格式为:

1

2
3

length=${

#array[@]}
# 或者
length=${
#array[*]}

例1:请注意#千万不能省略,看下面这个例子

请注意:当#号省略后,就变成了将数组所有元素复制给变量length,如果要打印个数请记得#

获取指定索引数元素值长度,一般格式为:   

1

length=${

#array[index]}

例2:获取上述例子中第二个元素color的长度值