参考文章:
https://www.coder.work/article/2566787
https://www.codenong.com/1063347/
网上直接搜的文章要么太绕,要么很有局限(数组元素中含有空格或者*时候无效),这里总结了几种方法:
0. 如果只传递一个数组,没有其他参数,那么直接用local_array=("$@")即可搞定,其余的方法都是多参数的
function func
{
local_array=("$@")
for str in "${local_array[@]}"
do
echo "$str"
done
}
paras=("hello world" "select * from test")
func "${paras[@]}"
1.传递函数名方式:
function func
{
name=$1[@]
local_array=("${!name}")
for str in "${local_array[@]}"
do
echo "p1 $str"
done
name=$2[@]
local_array=("${!name}")
for str in "${local_array[@]}"
do
echo "p2 $str"
done
}
para1=("hello world" "select * from test")
para2=("hello world" "select * from test")
func para1 para2
2.传递元素方式, 通过下标来倒推数组的内容位置,但由于有空格的存在,如果其他参数也是带空格的数组,这种方式是行不通的:
function func
{
local_array=("$@")
for(( i=0; i<${#local_array[@]}-1 ; i++ ))
do
echo "${local_array[$i]}"
done
echo "${@:$#}" # $@所有参数中的第$#个,也就是倒数第一个,$#是入参的总数
}
paras=("hello world" "select * from test")
func "${paras[@]}" "b"

本文总结了在Shell脚本中处理数组作为函数参数的几种方法,特别是当数组元素可能包含空格或者星号时。介绍了如何通过`local_array=("$@")`、传递函数名和元素下标等方式来处理这种情况,并给出了具体示例。
634

被折叠的 条评论
为什么被折叠?



