将数组传递给函数的最正确方法是什么?

rah*_*hmu 8 shell ksh array

考虑到我有一个非常大的数组$large_list,有没有办法编写一个将数组作为参数的函数?例如:

echo_idx_array () {
    arr="$1"
    idx="$2"

    echo "${arr[$idx]}"
}
Run Code Online (Sandbox Code Playgroud)

做这样的事情的通常策略是什么?我尝试给出变量,$large_list但它是空的。

我愿意修改该函数以使其适应参数列表中的任何更改。

作为记录,我正在使用 ksh88,并且我正在寻找尽可能便携的答案。


编辑:到目前为止,我能想到的最好方法是遍历数组并将每个元素作为参数发送给函数。这看起来非常丑陋且容易出错,更不用说它很快就会达到某个极限。这是我所做的:

foo () {
    echo $*
}

cmd="foo "
while [[ $i -lt $MAX_ARR_SIZE ]]; do
    cmd="$cmd ${large_list[$i]}"
    ((i=i+1))
done

eval $cmd
Run Code Online (Sandbox Code Playgroud)

难道没有更好的事情要做吗?

Gil*_*il' 10

要将数组元素作为参数传递给函数,请使用 ksh 语法将数组元素展开为列表。

work_on_array "${myarray[@]}"
Run Code Online (Sandbox Code Playgroud)

所述[@]后缀使得该阵列的扩展。双引号保护每个元素免于进一步扩展(拆分和通配)。扩展的结果通常不是像通常的双引号那样只有一个单词,而是与数组中的元素一样多的单词。

那么数组的第N个元素是。要访问它,您需要使用; 请参阅在另一个变量“内部”使用变量引用${N}eval