首页 > 系统相关 >Linux shell编程学习笔记16:bash中的关联数组

Linux shell编程学习笔记16:bash中的关联数组

时间:2023-10-29 16:34:36浏览次数:43  
标签:boy shell apple 16 cat csdn 数组 Linux echo


上一节我们探讨了普通的数组,即使用数字下标来索引数组中不同的元素的数组,也可以称之为索引数组。

相比纯粹的数字,字符串不仅能表明含义,也更便于记忆使用,于是就有了关联数组。

一、关联数组概述

bash 从4.0开始支持关联数组,关联数组可以使用可以使用任意的字符串、或者整数作为下标来访问数组元素。

与索引数组不同,关联数组必须声明。

二、声明关联数组并赋值

(一)先声明再赋值

1.声明关联数组

格式为:

declare -A 关联数组名

2.给关联数组元素赋值

格式为:

关联数组名[字符串下标]=值

3.实例

[csdn ~]$ exec bash
[csdn ~]$ declare -A a
[csdn ~]$ a["apple"]=apple
[csdn ~]$ a["boy"]=boy
[csdn ~]$ a["cat"]=cat
[csdn ~]$ echo ${a["apple"]}
apple
[csdn ~]$ echo ${a["boy"]}
boy
[csdn ~]$ echo ${a["cat"]}
cat

Linux shell编程学习笔记16:bash中的关联数组_shell编程

在这个实例中,我们先声明了关联数组a,接着给数组三个元素赋值,然后逐一输出每个元素值。

(二)声明并初始化赋值

1.格式

与普通的索引数组一样,我们可以在声明关联数组时同时进行初始化赋值,格式如下: 

declare -A 关联数组名=([字符串下标1]=值1 [字符串下标2]=值2 …… [字符串下标n]=值n)

 2.实例

[csdn ~]$ declare -A a=(["apple"]=apple ["boy"]=boy ["cat"]=cat)
[csdn ~]$ echo ${a["apple"]}
apple
[csdn ~]$ echo ${a["boy"]}
boy
[csdn ~]$ echo ${a["cat"]}
cat

Linux shell编程学习笔记16:bash中的关联数组_linux_02

在这个实例中,我们先声明了关联数组a并初始化了三个元素值,然后逐一输出每个元素值。

三、获取关联数组所有元素值

方法与普通的索引数组相同。

(一)格式

我们可以使用* 或 @ 作为数组元素下标来获取,具体格式即:

${数组名[@]} 

${数组名[*]}

(二)实例

[csdn ~]$ declare -A a=(["apple"]=apple ["boy"]=boy ["cat"]=cat)
[csdn ~]$ echo ${a[@]}
cat apple boy
[csdn ~]$ echo ${a[*]}
cat apple boy

Linux shell编程学习笔记16:bash中的关联数组_linux_03

四、获取关联数组长度

方法与普通的索引数组相同。

(一)格式

${#数组名[下标]}

${#数组名[下标]}

(二)实例

[csdn ~]$ declare -A a=(["apple"]=apple ["boy"]=boy ["cat"]=cat)
[csdn ~]$ echo ${#a[@]}
3
[csdn ~]$ echo ${#a[*]}
3
[csdn ~]$ echo ${#a["apple"]}
5
[csdn ~]$ echo ${#a["boy"]}
3
[csdn ~]$ echo ${#a["cat"]}
3

Linux shell编程学习笔记16:bash中的关联数组_shell脚本_04

在本例中,我们先声明了关联数组a并初始化了三个元素值,接着输出数组a的长度,然后逐一输出每个元素的长度。

五、列出关联数组所有字符串下标

由于关联数组使用字符串来作为下标来访问元素,这些作为下标的字符串就不能重复,有时我们想知道已经使用了哪些字符串作为下标,那该如何查询呢?

(一)格式

{!关联数组名[*]}

{!关联数组名[@]}

这个格式与获取数组长度相似,只是获取数组长度时我们用的是字符#,获取关联数组索引时我们使用字符!

(二)实例

[csdn ~]$ declare -A a=(["a"]=apple ["b"]=boy ["c"]=cat)
[csdn ~]$ echo ${a[*]}
apple boy cat
[csdn ~]$ echo ${!a[*]}
a b c
[csdn ~]$ echo ${!a[@]}
a b c

Linux shell编程学习笔记16:bash中的关联数组_关联数组_05

在本例中,我们先声明了关联数组a并初始化了三个元素值,接着输出数组a的所有元素值,然后分别用两种格式逐一输出数组a的所有字符串下标。 

标签:boy,shell,apple,16,cat,csdn,数组,Linux,echo
From: https://blog.51cto.com/endurer/8080520

相关文章

  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第八周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • Linux - 用户及文件权限管理
    本篇内容介绍Linux中创建用户,及用户组等操作Linux中的文件权限设置本篇内容知识点总结Linux用户管理Linux权限管理......
  • Linux文件及目录权限
    例如ls-l中显示的内容如下:-rwxrw-r--lrootroot1213Feb209:39abc10个字符确定不同用户能对文件干什么第一个字符代表文件类型-lbcd其余字符每三个一组(rwx)读(r)写(w)执行(x)第一组rwx:文件拥有者的权限是读,写和执行第二组rw-:与文件拥有者同一组的用户的权限是读,......
  • linux第三周
    id命令查看当前用户登录信息,ll查看文件所有者,敲的时候没碰到什么问题,用vim/etc/passwd和/etc/shadow查看目录时:分隔开的字符每一位都有自己的含义.通过useradd命令创建用户,grep命令筛选用户信息,useradd的同时用-G参数指定附加组,用gpasswd命令对一些信息修改,gpasswd......
  • Linux操作系统学习3
    上周学的是Linux操作系统中的文件权限中的基本权限,也就是UGO。这一周学的是基本权限后面的一些知识。主要是文件权限中的高级权限。有以下几个内容:SUID权限,SGID权限,Sticky权限。/usr/bin/passwd/,在这个文件中,第一行的第四个字符为“s”,这个s代的就是特殊权限,也就是SUID权限。任何......
  • Linux小技巧之awk必知必会
    LinuxShell三剑客之一,废话不多说直接上干货。目录1.指定分隔符2.指定打印行数3.打印最后一列4.打印倒数第二列5.匹配输出6.if判断7.统计列总数值8.时间格式转换示例数据:1.指定分隔符awk-F'|''{print$1}'log.txt#awk-F'|''{print$1}'log.txttbname============......
  • VMware虚拟机安装Linux教程(2023最新版)
    一、准备工作1.VMware软件(注意:如过不会安装此软件教程地址VM安装教程),常见的虚拟机软件有VMwareWorkstation(简称VMware)、VirtualBox、MicrosoftVirtualPC等,其中VMware市场占有率最高,所以本节以VMware为例来讲解Linux的安装。2.镜像:CentOS-6.4-i386-bin-DVD1(注意:如果没......
  • 制作自己的min linux(CentOS7.6)
    1.在现有的linux添加一块大小为20G的硬盘2.启动现有的linux。通过fdisk来给我的/dev/sdb进行分区 3.接下来,对/dev/sdb的分区进行格式化[root@localhost~]#mkfs.ext4/dev/sdb1[root@localhost~]#mkfs.ext4/dev/sdb2 4.创建目录,并挂载新的磁......
  • 【Shell】环境变量 自定义变量 特殊变量
    Shell变量:环境变量目标1、理解什么是系统环境变量?2、掌握常用的系统环境变量都有哪些?Shell变量的介绍变量用于存储管理临时的数据,这些数据都是在运行内存中的.变量类型系统环境变量自定义变量特殊符号变量系统环境变量介绍是系统提供的共享变量.是linux系统加载Shell的配置文件中......
  • 【pwn】[SWPUCTF 2021 新生赛]nc签到 --shell过滤字符
    附件下载打开:importosart='''  (( "####@@!!$$  ))    `#####@@!$$` ))  (( '####@!!$:  (( ,####@!!$: ))    .###@!!$:    `##@@!$:    `#@!!$ !@#  `#@!$:   @#$  #$  `#@!$:   !@!......