数组的类型

普通数组

  • 索引:通常是从0开始的整数,表示数组中的位置
    • 例如,第一个元素的索引是0,第二个元素的索引是1,依此类推
  • 元素:存储在数组中的实际值,每个索引对应一个元素值
    • 例如,my_array[0] 表示数组中的第一个元素。
  • 普通数组使用可不声明(declare -a [数组名]
1
2
3
my_array=("apple" "banana" "cherry")
# 索引: 0 1 2
# 元素: "apple" "banana" "cherry"

关联数组

  • 索引:在关联数组中,索引是字符串,而不是整数

    • 每个索引表示一个键,它与一个特定的元素值相关联。
    • 与普通数组最大的区别,其由特定格式的键值对组成
  • 元素:元素是与索引关联的值

    • 关联数组中的每个索引都映射到一个元素值。
  • 使用前必须声明(declare -A [数组名]

1
2
3
4
5
6
declare -A fruit_colors
fruit_colors["apple"]="red"
fruit_colors["banana"]="yellow"
fruit_colors["cherry"]="red"
# 索引: "apple" "banana" "cherry"
# 元素: "red" "yellow" "red"

数组的定义

直接定义

格式为 array_name=(value1 value2 ... valueN)

1
array=(a b c)

通过索引定义

格式为 array_name=( [1]=value1 [2]=value2 ... [N]=valueN )

1
array=([1]=a [2]=b [3]=c)

数组的遍历

通过索引遍历

  • 使用 for 循环以索引 i 来迭代数组 array
  • 这种方式适合于需要根据元素的索引来处理数组元素的情况
1
2
3
4
5
6
#!/bin/bash
names=(Tom Jeny David)
for (( i=0;i<${#names[*]};i++ ))
do
echo ${names[$i]}
done

不通过索引遍历

  • 这种方式使用 for 循环迭代数组 array 中的每个元素
    • 并将每个元素赋值给变量 i
    • 即:在每次迭代中,可以直接使用 i 来访问当前元素的值
  • 这种方式适合于需要依次访问数组元素并执行某些操作的情况
1
2
3
4
5
6
7
8
#!/bin/bash
names=(Tom Jeny David)
index=0
for i in ${names[@]}
do
echo "第${index}个元素的值为:${i}"
let index++
done

数组删切替

删除

使用unset array[index]命令,可以删除数组中的特定元素

  • array 是数组名
  • index 是索引

切片

使用 ${array[@]:start:length} 命令,可对数组进行切片

  • start 是起始索引
  • length 是要包括的元素的数量

替换

使用 ${array[@]/old/new} 命令,可对数组的某个特定元素进行全量替换

  • array是数组名
  • old 是需要替换的元素
  • new 是替换后的元素