LINUX.ORG.RU

bash. array в качестве аргумента функции


0

1

всем привет.

что-то никак не могу понять как array являющийся аргументом, использовать в функции...

var=( var1 var2 "var 3" )
 
func() {
   # echo "inside of func: ${1[*]}" # ???
   local loc=($1[*])
   for it in ${loc[*]}; do
      echo $it
   done
}
 
echo "offside of func: ${var[*]}"
func ${var[*]}
http://ideone.com/z5Adg

проблемы две:

1. в закоменченной строке сообщается об ошибке «bad substitution»

2. внутри цикла выводится только первый элемент, и то, какао-то он колеченный: «var1\[\*\]» (без обратных косых. это для экранирования от форума =))

не могу понять, как правильно записывать использование array переданный как аргумент.

спасибо.

★★★

Последнее исправление: niXman (всего исправлений: 2)

>не могу понять, как правильно записывать использование array переданный как аргумент.

Правильно записывать на языке, более подходящем для этого. Баш - не панацея.

Не стоит забывать о perl/python/ruby/... .

schizoid ★★★
()
Ответ на: комментарий от schizoid

на языке, более подходящем для этого.

В данном случае особых проблем нет: массив передается как список аргументов, вот если бы один из аргументов был бы массивом...

Лучше беспокоиться о привязке к баш.

anonymous
()
Ответ на: комментарий от niXman

«Веrной доrогой идёте, товаrищ!» (С)

Только не перебарщивай. Судя по твоим ежедневным постам, ты штудируешь ABS. Дело хорошее, только, как правильно тебе здесь уже говорили, не старайся абсолютно всё решать средствами bash. Если чувствуешь, что на шелле становится слишком трудно решать какую-то конкретную задачу, то стоит подумать о выборе более подходящего ЯП, того же питона, например.

Удачи в изучении шеллов.

OldFatMan
()
Ответ на: комментарий от GotF

эм... такой еще момент..

у меня в функцию передается два аргумента: 1)строка, 2)массив.

как быть, к примеру, если мне нужна итерация по массиву? т.е. как мне итерироваться по аргументам? и как, исключить первый?

где-то подсознательно, я предполагаю что нужно аргументами инициализировать массив. но это меня вернет к изначальной проблеме...

подскажите как быть?

спасибо.

niXman ★★★
() автор топика
Ответ на: комментарий от niXman

как быть, к примеру, если мне нужна итерация по массиву? т.е. как мне итерироваться по аргументам? и как, исключить первый?

shift

где-то подсознательно, я предполагаю что нужно аргументами инициализировать массив.

array_inside_of_func=( $@ )

GotF ★★★★★
()
Ответ на: комментарий от niXman

Advanced Bash Scripting Guide. Содержит ответы почти на все вопросы. На опеннете есть несколько устаревший перевод на русский.

GotF ★★★★★
()
Ответ на: комментарий от GotF

решил так:

func() {
   # $1 - name
   # $N - vars
   local temp=( $@ )
   local name=${temp[0]}
   local vars=( ${temp[@]:1} )
   ...
}
niXman ★★★
() автор топика
Ответ на: комментарий от GotF

перевод на русский

у меня нет сложности с английским. просто чтоб что-то искать, нужно знать как это называется. иначе на перечитывание всего подряд уйдет оооочень много времени.

благодарен.

niXman ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.