Linux 之数组
数组
和其他编程语言一样,Shell 也支持数组。数组(Array)是若干数据的集合,其中的每一份数据都称为元素(Element)。
Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。和 C++、Java、C# 等类似,Shell 数组元素的下标也是从 0 开始计数。
获取数组中的元素要使用下标[ ]
,下标可以是一个整数,也可以是一个结果为整数的表达式;当然,下标必须大于等于 0。
遗憾的是,常用的 Bash Shell 只支持一维数组,不支持多维数组。一对圆括号表示数组,数组元素之间用空格符号分割
数组定义
root@master:~# arr=( ) //注意,赋值号=
两边不能有空格,必须紧挨着数组名和数组元素。
root@master:~# echo $arr //默认输出数组的第一个元素
1
数组里面可以包含不是同一类型的数据:
root@master:~# arr=( "my name is yjt")
添加数组元素:
root@master:~# arr[]=
root@master:~# echo ${arr[]}
给特定的元素赋值
root@master:~# arr1=([]= []= []=)
root@master:~# echo ${arr1[]}
数组长度、元素与删除
获取数组元素:用${数组名[下标]} 得到数组元素(下标从0开始), 下标为*或者@得到整个数组内容
语法格式:${array_name[index]}
其中,array_name 是数组名,index 是下标
示例如下:
root@master:~# echo ${arr1[]} //获取单个元素 root@master:~# echo ${arr1[*]} //获取所有元素
6
root@master:~# echo ${arr1[@]}
2 4 6
删除:通过unset数组[下标]可以清除相应的元素,不带下标则清除全部数据
root@master:~# echo ${arr1[]} root@master:~# unset arr1[]
root@master:~# echo ${arr1[]} root@master:~# unset arr1
root@master:~# echo ${arr1[*]}
长度:用${#数组名[@或*]} 可以得到数组长度
root@master:~# arr=( )
root@master:~# echo ${#arr[*]}
获取数组元素的范围
直接通过 ${数组名[@或*]:起始位置:长度} 获取数组给定范围内元素,返回字符串,中间用空格分开
root@master:~# echo ${arr[*]::}
3
root@master:~# echo ${arr[@]:1:2}
2 3
替换
${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子
root@master:~# echo ${arr[*]} root@master:~# echo ${arr[*]//}
关联数组
Bash支持关联数组,它可以使用字符串作为数组索引,有时候采用字符串索引更容易理解。
定义关联数组
声明某个变量为关联数组
root@master:~# declare -A arr_test
将元素添加到关联数组‘
方法一:利用内嵌索引-值列表的方法
root@master:~# declare -A arr_test
root@master:~# arr_test=([name]=yjt [age]=)
方法二:使用独立的索引-值进行赋值
root@master:~# declare -A arr_test1
root@master:~# arr_test1[name]=yjt
root@master:~# arr_test1[age]=22
列出数组索引
每一个数组都有一个索引用于查找。使用${!数组名[@或者*]}获取数组的索引列表
root@master:~# echo ${arr_test[*]}
yjt
root@master:~# echo ${!arr_test[*]}
name age
获取所有的键值对
#!/bin/bash
declare -A arr_yjt
arr_yjt=([name]=yjt [age]=)
for key in ${!arr_yjt[*]}
do
echo "$key ---> ${arr_yjt[$key]}"
done
保存文件到yjt.sh
执行脚本文件:
root@master:~# bash yjt.sh
name ---> yjt
age --->
最新文章
- UIScrollView出现位移问题
- Eclipse自动补全功能管理
- fork与vfork
- sql 数据库 初级 个人学习总结(一)
- css3之过渡
- dll--二进制层面的复用
- linux Shell的使用
- jQuery $.each的使用方法
- SRM 582 Div II Level Two SpaceWarDiv2
- Qt调用Delphi编写的COM组件
- .net core 2.x - ids4 - identity - two factory 登录认证
- [Swift]LeetCode42. 接雨水 | Trapping Rain Water
- number (1)eclipse 连接数据库报错 数据库信息不对导致的出错
- C#的?和??
- scrapy 关于特殊字符的处理
- WPF路由事件学习(一)
- SQL、SQL Server、MySQL与Oracle
- 分析苹果代充产业链 汇率差+退款造就三线城市千万富翁_中新游戏研究_Joynews中新游戏
- 百度地图出现UnsatisfiedLinkError: Native method not found: com.baidu...
- LeetCode——Power of Two