bash 关联数组_使用Bash中的关联数组控制数据

本文介绍了Bash关联数组的使用,作为跟踪和处理变量的更有效方式。关联数组允许创建键值对,不同于传统的索引数组,它们提供了一种灵活存储和查询数据的方法,尤其适用于数据量不确定的情况。通过示例展示了如何创建、查询、操作和删除关联数组中的元素,强调了其在处理不可预测数据时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

bash 关联数组

如果您曾经编写过代码,无论是Shell脚本,Python脚本,C ++还是什至是Scratch,那么您都知道变量至关重要。 计算机和编码器将变量用作路站,它们在其中秘密地来回传递信息。 例如,如果您需要在Shell脚本中处理用户名,则可以设置一个变量,将用户名放入变量中,然后指示计算机对变量进行处理(对照授权用户列表进行检查) , 例如)。 变量很重要,因为它们使代码能够动态变化:它们是信息的占位符,这些信息预计将在每次运行代码时更改。

但是,由于变量非常普遍,因此它们也变得很笨拙。 通常,您在一个代码项目中收集了如此多的变量,以至于几乎无法跟踪所有变量。 您可以使用巧妙的约定,例如在所有相关变量的前面加上一个通用字符串(user_name,user_pass,user_time等),也可以在某个地方创建它们的主列表以方便参考,但是跟踪它的开销所有人都会变得很累。

传统上,此问题的一个答案是数组。 这些代码在大多数编码语言(包括Bash这样的shell脚本语言)中都运行良好。

大多数Shell提供创建,操作和查询索引数组的功能。 用简单的英语来说,索引数组是带有数字前缀的事物的列表。 事物列表及其分配的编号方便​​地包装在单个变量中,这使在代码中轻松“携带”成为可能。

但是, Bash具有创建关联数组的功能,并且将这些数组与其他任何数组一样对待。 关联数组使您可以创建键和值对的列表,而不仅仅是编号的值。

您可以将值分配给任意键:


   
   
$ declare -A userdata
$ userdata [ name ] =seth
$ userdata [ pass ] =8eab07eb620533b083f241ec4e6b9724
$ userdata [ login ] = ` date --utc + % s `

查询任何键:


   
   
$ echo " ${userdata[name]} "
seth
$ echo " ${userdata[login]} "
1583362192

您期望从阵列执行的大多数常规阵列操作均可用。 例如,您可以列出所有值:


   
   
$ echo " ${userdata[*]} "
8eab07eb620533b083f241ec4e6b9724 seth 1583362192

您可以查看整个数组:


   
   
$ typeset -A
declare -A BASH_ALIASES = '()'
declare -A BASH_CMDS = '()'
declare -A userdata = '([pass]="8eab07eb620533b083f241ec4e6b9724"
[name]="seth"
[login]="1583362192" )'

您还可以使用unset命令从阵列中删除项目:


   
   
$ unset userdata [ pass ]
$ typeset -A
[ ... ]
declare -A userdata = '([name]="seth"
[login]="1583362192" )'

最后,您可以关闭整个阵列。

 $  unset "userdata[*]" 

数据数组

utmp ,将登录时间与该时间所引用的用户相关联 ,而不是仅将两个数据对象存储为没有明显联系的单独变量,这对您将更为有用。

此外,与变量不同,数组中的条目在将数据存储到其中之前不需要存在。 在存储数据之前,您不必确切地知道要存储多少数据。 如果您正在处理无法控制或预测的数据,那么这可能是一个很大的优势:如果您不知道在utmp中一天到第二天期望有多少用户,那么很难构建一个包含所有内容的脚本。条目。 但是,对于数组,您要做的就是声明一个数组并读取数据,创建一个新的键和值对,直到用完要提取的数据。

数组功能强大,在Bash以外的编程语言中很常见。 立即开始使用它们!

翻译自: https://opensource.com/article/20/6/associative-arrays-bash

bash 关联数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值