关联数组 #
一、关联数组定义 #
1.1 基本定义 #
bash
#!/bin/bash
# 声明关联数组
declare -A user
# 赋值
user[name]="张三"
user[age]=25
user[city]="北京"
# 或者一次性定义
declare -A user=(
[name]="张三"
[age]=25
[city]="北京"
)
1.2 注意事项 #
bash
#!/bin/bash
# 必须先声明才能使用
declare -A map
# 不声明直接使用会创建索引数组
# map[key]=value # 这是索引数组,key会被当作0
# 正确用法
declare -A map
map[key]=value
二、访问元素 #
bash
#!/bin/bash
declare -A user=(
[name]="张三"
[age]=25
[city]="北京"
)
# 访问单个元素
echo ${user[name]} # 输出: 张三
echo ${user[age]} # 输出: 25
# 所有值
echo ${user[@]} # 输出: 张三 25 北京
# 所有键
echo ${!user[@]} # 输出: name age city
# 元素个数
echo ${#user[@]} # 输出: 3
三、遍历关联数组 #
bash
#!/bin/bash
declare -A user=(
[name]="张三"
[age]=25
[city]="北京"
)
# 遍历键值对
for key in "${!user[@]}"; do
echo "$key: ${user[$key]}"
done
# 只遍历值
for value in "${user[@]}"; do
echo "值: $value"
done
四、常用操作 #
4.1 检查键是否存在 #
bash
#!/bin/bash
declare -A config=(
[host]="localhost"
[port]=3306
)
# 检查键是否存在
if [[ -v config[host] ]]; then
echo "host 键存在"
fi
# 另一种方式
if [[ -n "${config[host]+x}" ]]; then
echo "host 键存在"
fi
4.2 删除元素 #
bash
#!/bin/bash
declare -A data=(
[a]=1
[b]=2
[c]=3
)
# 删除单个元素
unset data[b]
echo ${!data[@]} # 输出: a c
# 清空数组
data=()
echo ${#data[@]} # 输出: 0
五、实战示例 #
5.1 配置管理 #
bash
#!/bin/bash
declare -A config
load_config() {
local file="$1"
while IFS='=' read -r key value; do
[[ "$key" =~ ^#.*$ ]] && continue
[[ -z "$key" ]] && continue
config["$key"]="$value"
done < "$file"
}
get_config() {
local key="$1"
echo "${config[$key]}"
}
5.2 计数器 #
bash
#!/bin/bash
declare -A counter
count_words() {
local text="$1"
for word in $text; do
((counter[$word]++))
done
}
text="apple banana apple cherry banana apple"
count_words "$text"
for word in "${!counter[@]}"; do
echo "$word: ${counter[$word]}"
done
六、总结 #
6.1 关联数组操作 #
| 操作 | 语法 |
|---|---|
| 声明 | declare -A arr |
| 赋值 | arr[key]=value |
| 访问 | $ |
| 所有键 | $ |
| 所有值 | $ |
| 长度 | $ |
| 删除 | unset arr[key] |
6.2 下一步 #
你已经掌握了关联数组,接下来让我们学习 数组遍历!
最后更新:2026-03-27