Shell编程 — 数组

Shell编程之数组

在 Shell中数组分为 普通数组关联数组 两种
普通数组的索引只能是整数类型,下标从0开始
关联数组的索引可以使用字符串类型,Bash从4.0版本开始支持关联数组

定义数组

1
2
3
4
5
# 定义普通数组
declare -a array

# 定义关联数组
declare -A array

初始化数组

普通数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 方式一
# 使用默认分隔符(IFS)初始化数组
# 可以不定义(declare -a),而直接初始化数组
arr=(a b c)

# 自定义分隔符初始化数组
# 数组必须先定义,后赋值
OLDIFS=$IFS
IFS=','
declare -a arr2=(a,b,c)
IFS=$OLDIFS


# 方式二
# 可以不定义,而直接初始化
arr3[0]=a
arr3[1]=b
arr3[2]=c

关联数组

1
2
3
4
5
6
7
8
9
10
# 方式一
# 可以不定义,而直接初始化
arr=([index1]=1 [index2]=2 [index3]=3)

# 方式二
# 根据元素索引进行初始化
# 若定义的下标不能转换为数值,则数组必须先定义后赋值,否则下标默认转换为0
arr2['1']=a
arr2['2']=b
arr2['3']=c

读取数组

普通数组与关联数组通用操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 获取特定元素
echo ${array[index]}

# 获取数组中所有元素
echo ${array[@]}
echo ${array[*]}

# 获取数组索引
echo ${!array[@]}
echo ${!array[*]}

# 获取数组长度
echo ${#array[*]}
echo ${#array[@]}

# 遍历数组
# 使用for循环遍历数组,只能使用 ${array[@]},而不能使用 ${array[*]}
for i in "${array[@]}"; do
echo $i
done