当前位置: 首页 > news >正文

Linux bash 关联数组

目录

  • 一. 关联数组定义
  • 二. 访问关联数组
  • 三. 元素的添加与删除
  • 四. 键值对的获取与遍历
  • 五. 实际应用
    • 5.1 读取封装配置文件内容
    • 5.2 收集系统信息


一. 关联数组定义

  • 从 Bash 4.0 开始,Bash 支持关联数组。
  • 关联数组允许你将配对,并通过键来访问值,类似于其他编程语言中的 Map。

⏹通过declare -A来创建一个关联数组

declare -A 关联数组名称

⏹可以在创建关联数组的时候为其赋值

declare -A personMap=([name]="贾飞天"[age]=18[address]='地球'
)

二. 访问关联数组

# 定义一个关联数组
declare -A personMap=([name]="贾飞天"[age]=18[address]='地球'
)

⏹根据key访问对应的value

echo ${personMap["name"]}  # 贾飞天

⏹key也可以是变量

mykey="age"
echo ${personMap[$mykey]}  # 18

三. 元素的添加与删除

⏹元素的添加

personMap["car"]="红旗"
echo ${personMap["car"]}  # 红旗# 获取所有的key
echo "${!personMap[@]}"  # address age car name

⏹元素的删除

# 元素删除前,获取所有的key
echo "${!personMap[@]}"  # address age car name# 删除指定的key
unset personMap["car"]# 元素删除后,获取所有的key
echo "${!personMap[@]}"  # address age name

四. 键值对的获取与遍历

⏹获取所有的键

$ echo "${!personMap[@]}" | xargs -n 1
address
age
name

⏹获取所有的值

$ echo "${personMap[@]}" | xargs -n 1
地球
18
贾飞天

⏹遍历关联数组

for key in "${!personMap[@]}"; doecho "$key: ${personMap[$key]}"
done
# address: 地球
# age: 18
# name: 贾飞天

五. 实际应用

5.1 读取封装配置文件内容

⏹有配置文件如下

username=admin
password=secret
host=localhost
port=8080

⏹读取配置文件内容到关联数组中

# 声明一个关联数组
declare -A config# 读取配置文件内容到关联数组中
while IFS='=' read -r key value; doconfig["$key"]="$value"
done < my_conf.ini# 遍历关联数组,打印配置文件的内容
for key in "${!config[@]}"; doecho "$key: ${config[$key]}"echo "===================="
done# host: localhost
# ====================
# password: secret
# ====================
# username: admin
# ====================
# port: 8080
# ====================

5.2 收集系统信息

# 将系统信息收集到关联数组中
declare -A sysinfo=([hostname]=$(hostname)[os]=$(uname -o)[kernel]=$(uname -r)
)# 输出系统信息
for key in "${!sysinfo[@]}"; doecho "$key: ${sysinfo[$key]}"
done# hostname: ubuntu
# kernel: 4.4.0-166-generic
# os: GNU/Linux

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解锁定位服务:Flutter应用中的高德地图定位
  • Python 数据类型详解:列表、字典、元组与集合的操作指南
  • 【Linux进程】Linux Shell编程实战:构建简易脚本示例与技巧详解
  • 小说阅读书城微信小程序
  • C语言野指针
  • 小琳AI课堂:大语言模型如何符合伦理限制
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • 网络运维故障处理
  • java基础面试题总结
  • QT多线程编程(基础概念以及示例)
  • linux_L2_linux删除文件
  • 第R3周:LSTM-火灾温度预测:3. nn.LSTM() 函数详解
  • web安卓逆向之必学HTML基础知识
  • 大数据新视界 --大数据大厂之 Cassandra 分布式数据库:高可用数据存储的新选择
  • 牛客周赛 Round 60 连点成线(哈希+模拟)
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ERLANG 网工修炼笔记 ---- UDP
  • exports和module.exports
  • HTTP那些事
  • miaov-React 最佳入门
  • MQ框架的比较
  • Nacos系列:Nacos的Java SDK使用
  • Python连接Oracle
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • Vue学习第二天
  • vue自定义指令实现v-tap插件
  • 关于Flux,Vuex,Redux的思考
  • 如何胜任知名企业的商业数据分析师?
  • Prometheus VS InfluxDB
  • 如何用纯 CSS 创作一个货车 loader
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​TypeScript都不会用,也敢说会前端?
  • ###项目技术发展史
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (二)丶RabbitMQ的六大核心
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (三)mysql_MYSQL(三)
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (算法设计与分析)第一章算法概述-习题
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)VC++中ondraw在什么时候调用的
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • *p++,*(p++),*++p,(*p)++区别?
  • .net 7 上传文件踩坑
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 常见的偏门问题
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET项目中存在多个web.config文件时的加载顺序
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务