文章摘要
GPT 4
此内容根据文章生成,仅用于文章内容的解释与总结。

数组的类型

普通数组

  • 索引:通常是从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)

数组的取值

要访问数组中的值,可以使用${数组名[索引]}

读取索引

这用于获取数组的索引(或键),而不是数组元素本身

echo ${!array[*]} :视为整体

echo ${!array[@]} :视为个体

读取数值

返回的是数组中的所有元素,不包括索引

echo ${array[*]} :视为整体

echo ${array[@]} :视为个体

特定元素

echo ${array[0]} :访问数组的第一个元素

echo ${array[@]:1} :表示从索引 1 开始,包括索引 1 及之后的所有元素

echo ${array[@]:1:2} :从第二个元素开始,访问连续的两个元素

其他用法

echo ${#array[@]} : 获取数组中的元素个数(数组的长度)

echo ${#array[n]} :获取数组第n个元素的字符个数

数组的遍历

通过索引

  • 如:循环以索引 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

通过元素

  • 如:循环迭代数组 array 中的每个元素,并将每个元素赋值给变量 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 是替换后的元素