установить значения для элементов массива в функции - PullRequest
2 голосов
/ 31 января 2010

В скрипте bash я хотел бы поместить следующий код, который присваивает значения каждому элементу нескольких массивов в функцию

for (( i=0 ; i < ${#themes[@]} ; i+=1 )); do  
  c_bit_mins[i]=-5  
  c_bit_maxs[i]=15  
  gamma_bit_mins[i]=-15  
  gamma_bit_maxs[i]=3  
done

т.е. что-то вроде

function set_values()
{
for (( i=0 ; i < ${#themes[@]} ; i+=1 )); do  
  c_bit_mins[i]=-5  
  c_bit_maxs[i]=15  
  gamma_bit_mins[i]=-15  
  gamma_bit_maxs[i]=3  
done
}

Как это сделать? Особенно, когда эти массивы не рассматриваются как глобальные внутри функции.

Спасибо и всего наилучшего!

Ответы [ 2 ]

2 голосов
/ 31 января 2010

Вы можете сделать переменную локальной с помощью команды local:

local c_bit_mins c_bit_maxs gamma_bit_mins gamma_bit_maxs

Однако вы не можете «вернуть» массив из функции оболочки. Возвращаемое значение функции оболочки всегда является целым числом. Нецелые значения обычно «возвращаются», повторяя их и считывая их обратно, используя $(...) в окружающей программе Но это будет совершенно странно делать с массивами и четырьмя из них.

1 голос
/ 31 января 2010

Массивы являются глобальными, если вы не объявите их локальными.

$ unset a
$ test() { echo ${a[3]}; a[4]=456; }
$ a[3]=123
$ test
123
$ echo ${a[4]}
456
$ echo ${a[3]}
123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...