写写shell中数组的处理方式

news/2024/11/16 22:32:39/

数组

在Shell中,可以使用数组来存储一组相关的数据。Shell中的数组是一种特殊的变量类型,它可以用于存储多个值。

  1. 数组的定义:Shell中的数组可以使用以下语法定义:
array_name=(value1 value2 ... valuen)

其中,array_name是数组的名称,value1value2等是数组元素的值。数组元素可以是任何类型的数据,包括字符串和数字。

例如,定义一个包含三个字符串元素的数组:

fruits=("apple" "banana" "orange")

定义一个包含五个数字元素的数组:

numbers=(10 20 30 40 50)
  1. 数组的访问:可以使用以下语法访问数组的元素:
${array_name[index]}

其中,array_name是数组的名称,index是数组元素的下标,从0开始。例如:

echo ${fruits[0]}
# 输出:appleecho ${numbers[3]}
# 输出:40

可以使用[@][*]来访问数组的所有元素。例如:

echo ${fruits[@]}
# 输出:apple banana orangeecho ${numbers[*]}
# 输出:10 20 30 40 50
  1. 数组的遍历:可以使用for循环遍历数组的所有元素。例如:
for fruit in ${fruits[@]}
doecho $fruit
done# 输出:
# apple
# banana
# orange
  1. 数组的长度:可以使用${#array_name[@]}${#array_name[*]}来获取数组的长度。例如:
echo ${#fruits[@]}
# 输出:3echo ${#numbers[*]}
# 输出:5
  1. 数组的切片:可以使用${array_name[@]:start_index:length}来获取数组的子集,其中start_index是开始位置,length是子集的长度。例如:
echo ${fruits[@]:1:2}
# 输出:banana orangeecho ${numbers[*]:2:3}
# 输出:30 40 50
  1. 数组的修改:可以使用${array_name[index]}=new_value来修改数组的元素值。例如:
echo ${fruits[@]}
# 输出:apple banana orangefruits[1]="pear"
echo ${fruits[@]}
# 输出:apple pear orange
  1. 数组的删除:可以使用unset命令删除数组中的某个元素。例如:
echo ${fruits[@]}
# 输出:apple pear orangeunset fruits[1]
echo ${fruits[@]}
# 输出:apple orange

8.数组添加
在Shell中,可以通过多种方式向数组中添加元素,包括:

直接赋值:可以通过直接给数组元素赋值的方式向数组中添加元素。例如:

fruits=("apple" "banana" "orange")
fruits[3]="pear"
echo ${fruits[@]}
# 输出:apple banana orange pear

在上述代码中,先定义了一个包含3个元素的数组fruits,然后通过fruits[3]="pear"语句向数组中添加了一个新的元素。

+=操作符:可以使用+=操作符向数组中添加元素。例如:

fruits=("apple" "banana" "orange")
fruits+=("pear")
echo ${fruits[@]}
# 输出:apple banana orange pear

在上述代码中,先定义了一个包含3个元素的数组fruits,然后通过fruits+=("pear")语句向数组中添加了一个新的元素。

另外,在Shell中使用数组时,需要注意以下几点:

  • 数组元素之间用空格分隔,不需要用逗号或其他符号进行分隔。
  • 可以使用变量、命令输出等作为数组元素。
  • Shell中的数组下标是从0开始的。
  • 当数组元素是字符串时,需要使用双引号或单引号将其括起来,以避免因空格等特殊字符导致的解析错误。
  • 在使用${array_name[@]}${array_name[*]}时,可以使用双引号或单引号将其括起来,以避免因空格等特殊字符导致的解析错误。

关联数组

在Shell中,关联数组(也称为“字典”或“哈希表”)是一种特殊的数组类型,其中每个元素都是一个键值对(key-value pair),可以通过键来访问对应的值。关联数组中的键和值都可以是任意类型的数据,包括字符串和数字。

  1. 关联数组的定义:关联数组的定义方式与普通数组略有不同,使用以下语法:
declare -A array_name

其中,declare命令用于声明变量的属性,-A选项表示该变量是一个关联数组,array_name是数组的名称。

例如,定义一个名为person的关联数组,其中包含姓名、年龄和性别三个属性:

declare -A person
person[name]="张三"
person[age]=25
person[gender]="男"
  1. 关联数组的访问:可以使用以下语法访问关联数组中的元素:
${array_name[key]}

其中,array_name是数组的名称,key是键值。例如,在上面的person数组中,可以通过以下语句来访问name属性的值:

echo ${person[name]}
# 输出:张三

也可以使用${!array_name[@]}${!array_name[*]}来访问关联数组中的所有键。例如:

echo ${!person[@]}
# 输出:name age gender
  1. 关联数组的遍历:可以使用for循环遍历关联数组中的所有元素。例如:
for key in ${!person[@]}
doecho "${key}: ${person[$key]}"
done# 输出:
# name: 张三
# age: 25
# gender: 男
  1. 关联数组的长度:可以使用${#array_name[@]}${#array_name[*]}来获取关联数组中的元素个数。例如:
echo ${#person[@]}
# 输出:3
  1. 关联数组的修改:可以使用${array_name[key]}=new_value来修改关联数组中的元素值。例如:
echo ${person[age]}
# 输出:25person[age]=26
echo ${person[age]}
# 输出:26
  1. 关联数组的删除:可以使用unset命令删除关联数组中的某个元素。例如:
unset person[gender]

在上述命令中,person[gender]表示要删除的键值对,即gender: 男。执行该命令后,person数组中的元素变为:

[name]="张三"
[age]=26

需要注意的是,在使用${!array_name[@]}${!array_name[*]}遍历关联数组时,输出的键值对顺序可能与定义顺序不同。因为关联数组是无序的,键值对的顺序是由底层实现决定的。

另外,在进行关联数组操作时,也需要注意保证数据的完整性和一致性。如果需要进行更复杂的数据操作,可以考虑使用其他编程语言来实现。


http://www.ppmy.cn/news/84043.html

相关文章

yarn的使用、yarn与npm的区别

简介 Yarn与npm一样,都是包管理工具。 但是Yarn比npm更高效,具有包缓存机制,下载过的包,无需再次下载,直接引用。 安装 参考文档:官方文档_安装 因为Node.js默认使用npm作为包管理工具。 有这样一个全…

hql语法2

根据数据创建表 案例1:简单用户信息 1,admin,123456,男,18 2,zhangsan,abc123,男,23 3,lisi,654321,女,16 use hive01; ​ create table t_user(id int,uname string,pwd string,sex string,age int ) row format delimited fields terminated by ,; --指定 字段之间用 , 分…

LC-1080. 根到叶路径上的不足节点(递归DFS)

1080. 根到叶路径上的不足节点 难度中等126 给你二叉树的根节点 root 和一个整数 limit ,请你同时删除树中所有 不足节点 ,并返回最终二叉树的根节点。 假如通过节点 node 的每种可能的 “根-叶” 路径上值的总和全都小于给定的 limit,则该…

SARscape连接图编辑(ConnectGraph)

SARscape连接图编辑ConnectGraph 0 连接图是什么1 什么时候需要编辑连接图2 连接图编辑步骤 0 连接图是什么 连接图ConnectGraph就是差分干涉数据对的关系图。 在SARscape中进行干涉叠加Interferometric Stacking处理,常见的包括PS和SBAS。 首先就要根据数据的空间…

Redis底层原理深入学习

一、基本类型及底层实现 1.String 1)使用场景:简单字符串存储、分布式锁、计数器、全局唯一ID 2)数据结构:C语言中String用char[]表示,源码中用SDS封装char[],这是Redis存储的最小单元,一个SD…

Filter详解

Filter是什么: Filter表示过滤器,是Java Web三大组件之一(Servlet、Filter、Listener)。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 过滤器一般完成一些通用的操作,比如:权…

Nginx配置文件

四.Nginx配置 1.位置 /usr/local/nginx/conf/nginx.conf2.内容 Nginx的主配置文件是nginx.conf,这个配置文件一共由三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块、多个server块。每个server块中,可…

【Jasypt】Spring Boot 配置文件加解密 Jasypt 配置文件加密

Spring Boot 配置文件加解密 一、Jasypt简介二、集成方法2.1 方式一2.2 方式二2.3 方式三 三、Springboot整合Jasypt实战3.1 引入依赖3.2 编写配置类,配置相关信息3.3 使用Jasypt对数据库密码加密,并替换明文3.4 查看执行结果 四、拓展4.1 关于加解密秘钥…