2.2.2 数组传递
这一节,我们从 基础知识、简单实践、小结 三个方面来学习。
基础知识
简介
我们知道在shell脚本中,数组可以帮助我们做很多灵活的事情,尤其是数据的归类存储。而数组在函数的使用过程中,还是受到了一定程度的限制。这些限制主要体现在以下几个方面;
限制1:
以变量的方式传递数组给函数,函数内部无法正常使用
限制2:
我们只能先解析所有数组元素,然后再传递给函数,接着在函数体内部重新组合
限制3:
函数内部以echo方式输出数组所有元素,然后再函数外部重新组合为数组
简单实践
实践1-函数无法正常接收数据元素
查看脚本内容
[root@localhost ~]# cat function_array_input.sh
#!/bin/bash
# 功能: 函数接收数组元素
# 定制功能函数
func_array(){
echo "函数内接收的参数: $@"
}
# 定制数组变量
myarray=(aa bb cc dd ee)
echo "myarray数组的所有元素有: ${myarray[@]}"
# 数组传递给函数
func_array $myarray
脚本执行效果
[root@localhost ~]# /bin/bash function_array_input.sh
myarray数组的所有元素有: aa bb cc dd ee
函数内接收的参数: aa
结果显示:
虽然我们传递数组给函数,但是函数无法正常接收数组
实践2-函数接收数组
查看脚本内容
[root@localhost ~]# cat function_array_input2.sh
#!/bin/bash
# 功能: 函数接收数组元素
# 定制功能函数
func_array(){
echo "函数内接收的参数: $@"
func_arr=($(echo $@))
echo "函数内func_arr的数组元素有: ${func_arr[@]}"
}
# 定制数组变量
myarray=(aa bb cc dd ee)
echo "myarray数组的所有元素有: ${myarray[@]}"
# 数组解析后,将所有元素传递给函数
func_array ${myarray[@]}
脚本执行效果
[root@localhost ~]# /bin/bash function_array_input2.sh
myarray数组的所有元素有: aa bb cc dd ee
函数内接收的参数: aa bb cc dd ee
函数内func_arr的数组元素有: aa bb cc dd ee
实践3-脚本接收函数内数组
查看脚本内容
[root@localhost ~]# cat function_array_output.sh
#!/bin/bash
# 功能: 脚本接收函数内数组元素
# 定制功能函数
func_array(){
# 函数体内构造新数组
func_arr=($(echo $@))
# 生成新数组
for (( i=0; i<${#func_arr[@]}; i++ ))
do
newarray[$i]=$[ ${func_arr[$i]} * 3 ]
done
# 逐个返回数组元素
echo ${newarray[@]}
}
# 定制数组变量
myarray=(1 2 3 4 5)
echo "myarray数组的所有元素有: ${myarray[@]}"
# 接收函数体返回的数组内容
result=($(func_array ${myarray[@]}))
echo "函数返回的result数组元素:${result[@]}"
脚本执行效果
[root@localhost ~]# /bin/bash function_array_output.sh
myarray数组的所有元素有: 1 2 3 4 5
函数返回的result数组元素:3 6 9 12 15