开发工具

Shell 数组

13 篇文章69 次收藏
上一节:Shell 函数下一节:Shell 字符串操作

在 Shell 脚本中,数组(Array)是一种用于存储多个值的数据结构。以下是 Bash Shell 中数组的核心操作方法和示例:

一、数组定义与初始化

1. 直接赋值

# 定义索引数组
fruits=("Apple" "Banana" "Cherry")

# 定义稀疏数组(跳过某些索引)
colors[0]="Red"
colors[2]="Blue"


2. 从命令输出初始化

# 将ls结果存入数组
files=(*.txt)

# 使用mapfile逐行读取(Bash 4.0+)
mapfile -t lines < file.txt


二、访问数组元素

1. 获取单个元素

echo ${fruits[0]}   # 输出 Apple(索引从0开始)
echo ${colors[2]}   # 输出 Blue


2. 获取所有元素

echo ${fruits[@]}   # 输出所有元素 → Apple Banana Cherry
echo ${colors[*]}   # 输出所有元素(合并为字符串)


3. 获取数组长度

echo ${#fruits[@]}  # 输出 3(元素个数)


三、数组遍历

1. 使用 for 循环

for fruit in "${fruits[@]}"; do
    echo "水果: $fruit"
done


2. 遍历索引

for i in "${!fruits[@]}"; do
    echo "索引 $i: ${fruits[i]}"
done


四、数组操作

1. 添加元素

fruits+=("Orange")       # 末尾添加
fruits=("Grape" "${fruits[@]}")  # 开头添加


2. 删除元素

unset fruits[1]  # 删除第二个元素(Banana)
unset colors     # 删除整个数组


3. 数组切片

echo ${fruits[@]:1:2}  # 输出 Banana Cherry(从索引1开始取2个)


五、关联数组(键值对,Bash 4.0+)

1. 声明与赋值

declare -A user=(["name"]="John" ["age"]=30)
user["email"]="john@example.com"  # 添加新键值对


2. 访问元素

echo ${user["name"]}   # 输出 John
echo ${!user[@]}       # 输出所有键 → name age email


3. 遍历关联数组

for key in "${!user[@]}"; do
    echo "$key: ${user[$key]}"
done


六、实际应用示例

1. 处理命令行参数

args=("$@")  # 将所有参数存入数组
for arg in "${args[@]}"; do
    echo "参数: $arg"
done


2. 统计文件类型

declare -A file_types
for file in *; do
    ext="${file##*.}"
    ((file_types[$ext]++))
done

for ext in "${!file_types[@]}"; do
    echo "$ext 类型文件数: ${file_types[$ext]}"
done


七、注意事项

1、索引从0开始

Bash 数组默认使用从0开始的整数索引。


2、元素含空格的处理

用双引号包裹数组变量避免分割错误:

files=("file 1.txt" "file 2.txt")
for file in "${files[@]}"; do ... done


3、稀疏数组特性

删除元素后索引不自动重组,需手动处理。


4、兼容性问题

关联数组(declare -A)需 Bash 4.0+,旧版 Bash 或 sh 不支持。


通过灵活使用数组,您可以高效处理批量数据和复杂结构,提升脚本的可维护性和功能性。建议在需要存储多个相关值时优先考虑数组。


上一节:Shell 函数下一节:Shell 字符串操作