[Linux] shell编程之数组 [转载]

1 概述

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

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

2 定义数组

2.1 一维索引数组

方法1

# 定义一个空数组
array=()

# 为数组元素赋值
array1[0]=a
array1[1]=b
array1[2]=c

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

方法2

array2=(a b c)

元素之间以空格隔开。

2.2 多维数组

数组名[索引1][索引2]=值
或者
数组名[索引1,索引2]=值

2.3 关联数组

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

2.3.1 案例:定义一个名为user_info的数组

declare -A user_info
user_info[name]=devops
user_info[age]=18

或者

user_info=([name]=devops [age]=18)

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

3 操纵数组

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

3.1.1 获取单个元素的值


# 获取第一个元素的值
echo ${array1[0]}
> a

# 获取第一个元素的值
echo ${array1[-1]}
> b

3.1.2 获取所有元素的值

echo ${array1[*]} 
> a b c

# 或:  
echo ${array1[@]}

3.1.3 统计数组的长度

echo ${#array1[*]}
> 3

3.1.4 打印数组的下标值

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

3.1.5 删除数组元素和数组

unset array2[2]			# 删除索引数组的第三个元素

unset user_info[age]	# 删除关联数组中索引为age的元素

unset array2			# 删除数组

3.2 循环遍历数组

3.2.1 方法1:for循环直接取值

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

3.2.2 方法2:通过下标取值

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

3.2.3 方法3:C语言风格

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

4 FAQ

4.1 $*$@的区别?

4.1.1 当直接通过echo获取数组所有元素时:二者等效

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

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

X 参考文献

posted @ 2023-11-03 10:21  千千寰宇  阅读(32)  评论(0编辑  收藏  举报