相关疑难解决方法(0)

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

考虑到我有一个非常大的数组$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)

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

shell ksh array

8
推荐指数
1
解决办法
2万
查看次数

如何将数组作为函数参数传递但带有其他额外参数?

以下后期解决方案按预期工作:

因此 - 从他的回答来看:

function copyFiles() {
   arr=("$@")
   for i in "${arr[@]}";
      do
          echo "$i"
      done

}

array=("one 1" "two 2" "three 3")

copyFiles "${array[@]}"
Run Code Online (Sandbox Code Playgroud)

写这篇文章的原因是如果发生以下情况怎么办:

copyFiles "${array[@]}" "Something More"
copyFiles "Something More" "${array[@]}"
Run Code Online (Sandbox Code Playgroud)

问题:我确实意识到发送的参数,当收到它们时,函数中的参数如何 - 它们实际上是合并的 - 所以$1并且$2不再按预期工作,“数组”参数与其他参数集成

我已经做了一项研究:

遗憾的typeset -n不起作用

并在:

无法预期工作 - 在该答案中,有一条评论表明存在问题 - 带有演示测试/验证的链接 - 关于${#array[@]}函数内的数组大小 ( ) 不同。

那么如何实现这个目标呢?

shell bash array shell-script bash-array

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

array ×2

shell ×2

bash ×1

bash-array ×1

ksh ×1

shell-script ×1