Предположим, у меня очень большой массив $large_list
, есть ли способ написать функцию, которая будет принимать массив в качестве аргумента? Например:
echo_idx_array () {
arr="$1"
idx="$2"
echo "${arr[$idx]}"
}
Какова обычная стратегия сделать что-то подобное? Я попытался дать переменную, $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
Разве нет ничего лучше?
"${array[$@]}
. Ваше предложение действительно работает. Моя вина.
func "${array[@]}"
? Если вам нужно передать только один элемент, просто передайте элемент - не нужно делать его более сложным, передавая массив и индекс.