Shell 数组_shell for 数组

Shell 数组_shell for 数组参考书籍:《LinuxShell核心编程指南》概述数组是Shell的一种特殊变量,是一组数据的集合,里面的每个数据被称为一个数组元素。当前Bash仅支持一维索引数组和关联数组,Bash对数组的大小没有限制。定义数组索引数组第一种方法array1[0]=aarray1[1]=barray1[2]=c这会得到一个包含三个元素的数组array1第二种方法array2=(abc)元素之间以空格隔开处理数组直接获取元素的值及数组的信息获取单个元素的值echo${array


参考书籍:《Linux Shell核心编程指南》

一、概述

数组是Shell的一种特殊变量,是一组数据的集合,里面的每个数据被称为一个数组元素。

当前Bash仅支持一维索引数组和关联数组,Bash对数组的大小没有限制。

二、定义数组

2.1.索引数组

方法一

array=()		#定义一个空数组
array1[0]=a
array1[1]=b
array1[2]=c
只听到从架构师办公室传来架构君的声音:
人涉卬否,卬须我友。有谁来对上联或下联?

这会得到一个包含三个元素的数组array1

方法二

此代码由Java架构师必看网-架构君整理
array2=(a b c)

元素之间以空格隔开

2.2.关联数组

关联数组可以使用非数字作为下标,可以是任意字符串

定义一个名为user_info的数组

declare -A user_info
user_info[name]=devops
user_info[age]=18
或者
user_info=([name]=devops [age]=18)

注意:在函数外部定义的关联数组为全局变量,在函数内部定义的关联数组为局部变量

多维数组

此代码由Java架构师必看网-架构君整理
数组名[索引1][索引2]=值 或者 数组名[索引1,索引2]=

三、处理数组

3.1.直接获取元素的值及数组的信息

1、获取单个元素的值

echo ${array1[0]}	#获取第一个元素的值
echo ${array1[-1]}	#获取最后一个元素的值

在这里插入图片描述

2、获取所有元素的值

echo ${array1[*]}	或者用echo ${array1[@]}

在这里插入图片描述

3、统计数组的长度

echo ${#array1[*]}

在这里插入图片描述

4、打印数组的下标值

echo ${ 
   !array1[@]}
echo ${ 
   !user_info[@]}

在这里插入图片描述

5、删除数组元素和数组

unset array2[2]			#删除索引数组的第三个元素
unset user_info[age]	#删除关联数组中索引为age的元素
unset array2			#删除数组

3.2.使用循环的方式遍历数组

方法一:直接取值

for i in "${array1[@]}"
do
	echo $i
done

方法二:通过下标取值

for i in ${ 
   !array1[@]}
do
	echo ${array1[i]}
done

方法三:C语言风格

for((i=0;i<${#array1[@]};i++))
do
	echo ${array1[i]}
done

四、$*和$@的区别

4.1.当直接通过echo获取数组所有元素时,它们是一样的效果

在这里插入图片描述

4.2.而在循环中它们就有区别了

在这里插入图片描述

在这里插入图片描述

总结:${array1[*]}会将数组元素视为一个整体,而${array1[@]}将所有数组元素视为独立的个体,推荐使用${array1[@]}

五、技巧

字符串以冒号分隔存入数组

string="12:34:56"
array=(${string/:/ })
本文来源运维@小兵,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/209418
0

发表评论