数组操作 #
一、数组合并 #
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