如何在Bash中向函数传递数组参数
Bash函数中正确传递并操作数组参数的方法
原代码的问题
- 传递数组时
"${array_kelime1[@]}"会将数组展开为多个独立参数,但函数内仅通过$1获取了第一个元素,无法拿到完整数组。 parameter=$1将变量定义为普通字符串,后续parameter[$i]=0实际是创建了一个新数组,和传入的原数组没有关联。
正确实现方式
方法1:传递数组名(Bash 4.3+ 推荐)
通过间接引用直接操作原数组,无需返回值即可修改原数组内容:
Func() { # 接收传入的数组名 local arr_name="$1" # 用-n选项创建数组的引用 local -n arr_ref="$arr_name" # 输出原数组内容 echo "原数组内容: ${arr_ref[@]}" # 为数组元素批量赋值 for ((i = 0; i < 26; i++)); do arr_ref[$i]=0 done } # 测试用数组 array_kelime1=(apple banana cherry) # 传递数组名给函数 Func array_kelime1 # 验证原数组已被修改 echo "修改后的数组: ${array_kelime1[@]}"
方法2:传递所有数组元素(兼容旧版Bash)
将数组所有元素作为参数传入,在函数内重新组装成数组,修改后需将结果返回给外部:
Func() { # 将所有传入参数重新组装为数组 local -a parameter=("$@") echo "原数组内容: ${parameter[@]}" # 批量赋值 for ((i = 0; i < 26; i++)); do parameter[$i]=0 done # 返回修改后的数组 echo "${parameter[@]}" } # 测试用数组 array_kelime1=(dog cat bird) # 传递数组所有元素并接收返回结果 modified_array=($(Func "${array_kelime1[@]}")) # 输出修改后的数组 echo "修改后的数组: ${modified_array[@]}"
内容的提问来源于stack exchange,提问作者Sultan Çepni
相关产品推荐
相关产品推荐

