История изменений
Исправление Zmicier, (текущая версия) :
как, блин, нормально функции писать
Если кратко, то в процедурном стиле. В другие парадигмы ГНУ Баш не умеет.
в частности, как работать с аргументами-массивами
Никак. Аргументов-массивов быть не может. Передаем имя глобального массива ссылкой (reference).
зато пробовал {$1[@]}
Всё это очень нелогично и непоследовательно.
Напротив — вот как раз это весьма логично, здесь нет отдельного синтаксиса, все обрабатывается по общим правилам.
Логика такая: программа на Баше интерпретируется «послойно» — на прошлом этапе генерируется *программа* для следующего. Это как препроцессор в Си, только лучше, или как макросы в Лиспах, только хуже.
Так здесь ${!arr}
раскрывается сначала в ${my_array[@]}
, а затем в 'a' 'b' 'c' 'd' 'f'
.
${1[@]}
же — это все элементы массива с именем 1
, а не my_array
.
Исправление Zmicier, :
как, блин, нормально функции писать
Если кратко, то в процедурном стиле. В другие парадигмы ГНУ Баш не умеет.
в частности, как работать с аргументами-массивами
Никак. Аргументов-массивов быть не может. Передаем имя ссылкой (reference).
зато пробовал {$1[@]}
Всё это очень нелогично и непоследовательно.
Напротив — вот как раз это весьма логично, здесь нет отдельного синтаксиса, все обрабатывается по общим правилам.
Логика такая: программа на Баше интерпретируется «послойно» — на прошлом этапе генерируется *программа* для следующего. Это как препроцессор в Си, только лучше, или как макросы в Лиспах, только хуже.
Так здесь ${!arr}
раскрывается сначала в ${my_array[@]}
, а затем в 'a' 'b' 'c' 'd' 'f'
.
${1[@]}
же — это все элементы массива с именем 1
, а не my_array
.
Исходная версия Zmicier, :
как, блин, нормально функции писать
Если кратко, то в процедурном стиле. В другие парадигмы ГНУ Баш не умеет.
в частности, как работать с аргументами-массивами
Никак. Аргументов-массивов быть не может. Передаем имя ссылкой (reference).
зато пробовал {$1[@]}
Всё это очень нелогично и непоследовательно.
Напротив — вот как раз это весьма логично, здесь нет отдельного синтаксиса, все обрабатывается по общим правилам. ${1[@]}
— это все элементы массива с именем 1
, тогда как вам нужны все элементы
Логика такая: программа на Баше интерпретируется «послойно» — на прошлом этапе генерируется *программа* для следующего. Это как препроцессор в Си, только лучше, или как макросы в Лиспах, только хуже.
Так здесь ${!arr}
раскрывается сначала в ${my_array[@]}
, а затем в a b c d f
.