2013-12-22 4 views

ответ

4

Passing "${arr[@]}" (@ ответ quickshiftin в) вид работ, но важно отметить, что он не пропускает массив , но массив элементов, как отдельные аргументы, доступного вызывающему функции как $1, $2 ...

Это имеет следующие последствия:

  • в вызываемой функции вы должны повторно собрать аргументы обратно в массив самостоятельно (хотя это легко сделать: reassembledArray=("[email protected]")
  • , если входной массив был разреженным, т.е. его индексы не смежны, эта информация теряется.

Суть этого: нет никакого способа прохода массивов в качестве такого.

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

Пример:

my_func() { 
    echo "Elements of arr:" 
    for el in "${arr[@]}"; do echo "[$el]"; done 
} 

arr=(a b c) 
my_func 
Смежные вопросы