LINUX.ORG.RU

История изменений

Исправление 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.