数组操作 #

一、数组合并 #

bash
#!/bin/bash

arr1=(a b c)
arr2=(d e f)

# 合并数组
arr3=("${arr1[@]}" "${arr2[@]}")
echo ${arr3[@]}  # 输出: a b c d e f

# 追加合并
arr1+=("${arr2[@]}")
echo ${arr1[@]}  # 输出: a b c d e f

二、数组排序 #

bash
#!/bin/bash

arr=(3 1 4 1 5 9 2 6)

# 使用sort排序
sorted=($(printf '%s\n' "${arr[@]}" | sort -n))
echo ${sorted[@]}  # 输出: 1 1 2 3 4 5 6 9

# 降序排序
sorted_desc=($(printf '%s\n' "${arr[@]}" | sort -nr))
echo ${sorted_desc[@]}  # 输出: 9 6 5 4 3 2 1 1

# 字符串排序
str_arr=("banana" "apple" "cherry")
sorted_str=($(printf '%s\n' "${str_arr[@]}" | sort))
echo ${sorted_str[@]}  # 输出: apple banana cherry

三、数组搜索 #

bash
#!/bin/bash

arr=(apple banana cherry date)

# 检查元素是否存在
contains() {
    local arr=("$@")
    local target="${arr[-1]}"
    unset 'arr[-1]'
    
    for item in "${arr[@]}"; do
        [[ "$item" == "$target" ]] && return 0
    done
    return 1
}

if contains "${arr[@]}" "banana"; then
    echo "找到 banana"
fi

# 获取元素索引
index_of() {
    local arr=("$@")
    local target="${arr[-1]}"
    unset 'arr[-1]'
    
    for i in "${!arr[@]}"; do
        [[ "${arr[$i]}" == "$target" ]] && echo $i && return
    done
    echo -1
}

idx=$(index_of "${arr[@]}" "cherry")
echo "cherry 的索引: $idx"

四、数组去重 #

bash
#!/bin/bash

arr=(a b c a d b e)

# 使用sort和uniq去重
unique=($(printf '%s\n' "${arr[@]}" | sort -u))
echo ${unique[@]}  # 输出: a b c d e

# 保持原顺序去重
unique_ordered() {
    local arr=("$@")
    local -A seen
    local result=()
    
    for item in "${arr[@]}"; do
        if [[ -z "${seen[$item]}" ]]; then
            seen[$item]=1
            result+=("$item")
        fi
    done
    
    echo "${result[@]}"
}

unique=$(unique_ordered "${arr[@]}")
echo "$unique"  # 输出: a b c d e

五、数组过滤 #

bash
#!/bin/bash

arr=(1 2 3 4 5 6 7 8 9 10)

# 过滤偶数
evens=()
for num in "${arr[@]}"; do
    if (( num % 2 == 0 )); then
        evens+=("$num")
    fi
done
echo "偶数: ${evens[@]}"

# 使用grep过滤
filtered=($(printf '%s\n' "${arr[@]}" | grep -E '^[0-9]+$'))
echo "数字: ${filtered[@]}"

六、总结 #

6.1 数组操作速查 #

操作 方法
合并 arr=(“${a[@]}” “${b[@]}”)
排序 sort
搜索 遍历比较
去重 sort -u 或关联数组
过滤 条件遍历

6.2 下一步 #

你已经掌握了数组操作,接下来让我们学习 关联数组

最后更新:2026-03-27