2010-01-31 4 views
2

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

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

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

local c_bit_mins c_bit_maxs gamma_bit_mins gamma_bit_maxs 

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

1

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

$ unset a 
$ test() { echo ${a[3]}; a[4]=456; } 
$ a[3]=123 
$ test 
123 
$ echo ${a[4]} 
456 
$ echo ${a[3]} 
123 
Смежные вопросы