考虑到我有一个非常大的数组$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)
难道没有更好的事情要做吗?
以下后期解决方案按预期工作:
因此 - 从他的回答来看:
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[@]}函数内的数组大小 ( ) 不同。
那么如何实现这个目标呢?