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