You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:40:42