关联数组 #

一、关联数组定义 #

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