目录

  1. 引言
  2. 数组概述
  3. 定义数组
    • 3.1 一维数组
    • 3.2 多维数组
  4. 数组操作
    • 4.1 访问元素
    • 4.2 修改元素
    • 4.3 添加元素
    • 4.4 删除元素
  5. 数组循环
  6. 数组与字符串
  7. 总结
  8. 参考资料

1. 引言

Shell 脚本中的数组是一种可以存储多个元素的特殊变量。数组使得我们可以更加灵活地处理多个数据元素,特别是在需要批量处理数据时非常有用。Shell 中的数组与许多其他编程语言中的数组有所不同,它允许使用索引来引用和修改元素。本文将详细介绍 Shell 中数组的使用,包括如何定义、操作和遍历数组。


2. 数组概述

Shell 中的数组是一种通过索引访问元素的数据结构。与其他编程语言相比,Shell 中的数组没有固定的长度,并且可以动态增长。Shell 数组的索引从 0 开始,支持非连续的整数索引,甚至可以通过字符串作为索引。


3. 定义数组

3.1 一维数组

Shell 中定义一维数组非常简单,通常通过括号和空格分隔元素来定义。

# 定义数组
arr=("apple" "banana" "cherry")

# 输出数组中的元素
echo ${arr[0]}  # 输出 apple
echo ${arr[1]}  # 输出 banana
echo ${arr[2]}  # 输出 cherry

3.2 多维数组

Shell 不直接支持多维数组,但可以通过关联数组模拟多维数组的行为。我们可以使用字符串作为索引来模拟一个多维数组:

# 定义模拟的二维数组
arr_2d[0,0]="apple"
arr_2d[0,1]="banana"
arr_2d[1,0]="cherry"

# 输出模拟的二维数组
echo ${arr_2d[0,0]}  # 输出 apple
echo ${arr_2d[0,1]}  # 输出 banana
echo ${arr_2d[1,0]}  # 输出 cherry


4. 数组操作

4.1 访问元素

可以通过索引来访问数组中的元素。

arr=("apple" "banana" "cherry")
echo ${arr[0]}  # 输出 apple

如果你尝试访问一个不存在的元素,Shell 会返回一个空值。

echo ${arr[5]}  # 输出空值,因为索引 5 不存在

4.2 修改元素

可以直接通过索引修改数组中的元素。

arr[1]="orange"
echo ${arr[1]}  # 输出 orange

4.3 添加元素

Shell 数组是动态的,你可以在数组末尾添加新的元素。通过直接赋值操作可以向数组中添加元素:

arr[3]="grape"
echo ${arr[3]}  # 输出 grape

你也可以通过其他方法(如使用 +=)将多个元素追加到数组中:

arr+=("mango" "pear")
echo ${arr[4]}  # 输出 mango
echo ${arr[5]}  # 输出 pear

4.4 删除元素

通过 unset 命令可以删除数组中的某个元素:

unset arr[2]  # 删除索引为 2 的元素
echo ${arr[2]}  # 输出空值,因为索引 2 的元素已被删除

如果要删除整个数组,可以使用 unset 来删除整个数组变量:

unset arr


5. 数组循环

Shell 中的数组通常通过 for 循环进行遍历,方法有多种。

5.1 使用 for 循环遍历数组

arr=("apple" "banana" "cherry")
for item in "${arr[@]}"; do
  echo $item
done

输出:

apple
banana
cherry

5.2 使用 for 循环索引遍历数组

通过循环的方式访问数组索引:

arr=("apple" "banana" "cherry")
for i in "${!arr[@]}"; do
  echo "$i: ${arr[$i]}"
done

输出:

0: apple
1: banana
2: cherry


6. 数组与字符串

Shell 中数组的元素实际上是字符串。即使你将数字作为数组元素,它们也会被当作字符串处理。例如:

arr=("1" "2" "3")
echo ${arr[0]}  # 输出 1
echo $((arr[0] + arr[1]))  # 输出 3,因为 Shell 会自动将字符串转换为数字进行计算


7. 总结

Shell 中的数组提供了强大的功能,可以存储多个数据元素并通过索引快速访问。Shell 数组支持一维数组、模拟的多维数组以及动态操作(如添加和删除元素)。通过使用 for 循环和数组操作命令,您可以轻松地处理和操作数组中的数据。在日常的 Shell 脚本编写中,数组是一个非常重要的工具,它能够极大地提升脚本的灵活性和效率。


8. 参考资料

  1. Bash Arrays
  2. Advanced Bash-Scripting Guide
  3. Bash Programming – Arrays