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

Shell脚本中如何向函数传递多数组并在函数内访问

在Shell脚本中传递两个字符串数组给函数

这里给你两种实用的方法,适配不同的Bash版本场景:

方法1:用分隔符区分数组(兼容所有Bash版本)

Shell函数的参数是扁平化的,没法直接识别数组边界,所以可以在两个数组之间插一个不会出现在数组元素里的特殊标记,在函数内部拆分出两个数组。

示例代码:

#!/bin/bash

# 处理数组的函数
process_two_arrays() {
    # 先收集第一个数组,直到碰到分隔符
    local first_array=()
    while [[ "$1" != "__ARRAY_SPLIT__" ]]; do
        first_array+=("$1")
        shift
    done
    # 跳过分隔符
    shift
    # 剩下的参数全部归为第二个数组
    local second_array=("$@")

    # 验证:遍历输出第一个数组
    echo "第一个数组的元素:"
    for item in "${first_array[@]}"; do
        echo "- $item"
    done

    # 验证:遍历输出第二个数组
    echo -e "\n第二个数组的元素:"
    for item in "${second_array[@]}"; do
        echo "- $item"
    done
}

# 定义测试用的两个字符串数组
fruits=("apple" "banana" "cherry with space")
colors=("red" "light yellow" "dark green")

# 调用函数:展开第一个数组 + 分隔符 + 展开第二个数组
process_two_arrays "${fruits[@]}" "__ARRAY_SPLIT__" "${colors[@]}"

方法2:用命名引用(Bash 4.3及以上可用)

如果你的Bash版本够新(4.3+),可以用declare -n创建数组的引用,直接在函数里操作原数组,写法更简洁。

示例代码:

#!/bin/bash

# 处理数组的函数
process_two_arrays() {
    # 创建两个数组的引用
    declare -n arr1="$1"
    declare -n arr2="$2"

    # 验证输出
    echo "第一个数组的元素:"
    for item in "${arr1[@]}"; do
        echo "- $item"
    done

    echo -e "\n第二个数组的元素:"
    for item in "${arr2[@]}"; do
        echo "- $item"
    done

    # 顺带提一句:这种方法可以直接修改原数组,比如给第一个数组加个元素
    arr1+=("date")
}

# 定义测试数组
fruits=("apple" "banana" "cherry")
colors=("red" "yellow" "green")

# 调用函数:直接传数组名就行
process_two_arrays fruits colors

# 查看原数组是否被修改
echo -e "\n修改后的第一个数组:"
for item in "${fruits[@]}"; do
    echo "- $item"
done

小提示

  • 方法1的分隔符一定要选数组里绝对不会出现的字符串,避免拆分出错。
  • 方法2虽然方便,但如果函数里不小心修改了引用数组,原数组也会跟着变,使用时注意。

内容的提问来源于stack exchange,提问作者Lucky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 14:20:27