在日常的 Linux 系统管理和自动化脚本编写中,Shell 脚本 是一个非常强大的工具。而从 Bash 4.0 开始,引入了一个非常实用的功能——关联数组(Associative Arrays)。它允许我们像其他高级语言一样,使用“键-值”对来存储和访问数据。
本文将带你从零开始,一步步了解什么是关联数组、如何声明、赋值、读取以及实际应用场景,即使你是 Shell 编程的小白,也能轻松上手!

普通数组(索引数组)使用数字作为下标(如 arr[0], arr[1]),而关联数组则使用字符串作为“键”(key)来访问对应的“值”(value)。例如:
这种结构非常适合处理非连续或非数字标识的数据。
关联数组仅在 Bash 4.0 及以上版本 支持。你可以通过以下命令检查你的 Bash 版本:
bash --version如果你使用的是较老的系统(如 CentOS 7 默认 Bash 为 4.2,支持;但 macOS 默认使用 zsh 或旧版 bash,可能不支持),请确保环境满足要求。
使用 declare -A 命令来声明一个关联数组:
declare -A user_id这行代码创建了一个名为 user_id 的关联数组。
有多种方式可以给关联数组赋值:
user_id["alice"]=1001user_id["bob"]=1002user_id["charlie"]=1003declare -A user_id=( ["alice"]=1001 ["bob"]=1002 ["charlie"]=1003)通过键名即可获取对应的值:
echo ${user_id["alice"]}# 输出:1001使用 ${!array[@]} 获取所有键,然后循环遍历:
for name in "${!user_id[@]}"; do echo "用户: $name, ID: ${user_id[$name]}"done输出可能为(顺序不一定固定):
用户: bob, ID: 1002用户: alice, ID: 1001用户: charlie, ID: 1003假设你要统计日志中不同 IP 的访问次数:
#!/bin/bashdeclare -A ip_count# 模拟日志行(实际可从文件读取)logs=("192.168.1.10" "192.168.1.20" "192.168.1.10" "10.0.0.5" "192.168.1.10")for ip in "${logs[@]}"; do if [[ -z ${ip_count[$ip]} ]]; then ip_count[$ip]=1 else ((ip_count[$ip]++)) fidone# 输出统计结果for ip in "${!ip_count[@]}"; do echo "$ip 访问了 ${ip_count[$ip]} 次"done运行结果:
192.168.1.10 访问了 3 次192.168.1.20 访问了 1 次10.0.0.5 访问了 1 次这个例子展示了关联数组在 Shell 编程 中的强大之处——用简洁的方式实现字典式计数。
declare -A 声明,否则会被当作普通数组处理。/bin/sh 或其他 Shell(如 dash、zsh 默认模式)中使用。通过本文,你已经学会了如何在 Linux Shell 中使用关联数组进行高效的数据管理。无论是配置映射、日志分析还是自动化任务,关联数组都能让你的脚本更清晰、更强大。
记住关键词:Linux Shell、关联数组、bash脚本、Shell编程。掌握这些,你就离 Shell 高手又近了一步!
本文由主机测评网于2025-11-26发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/202511798.html