LINUX.ORG.RU

bash. функции. рекурсия.


0

1

привет.

есть функция на подобии сей:

func() {
   . ./$1.sh

   for it in ${data[@]}; do # в каждом подгружаемом скрипте есть список "data"
      func \
         ${it}
   done

   echo $1 # <<< проблема
}
проблема в том, что после разворачивания стека(если в bash можно так сказать) $1 указывает на значение последнего рекурсивного вызова, а не на полученное в своем аргументе. вот.

подскажите, как исправить?

спасибо.

★★★

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

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

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

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

да. пример неудачный получился.

основная проблема как раз с переменными подгруженными из скрипта.

niXman ★★★
() автор топика

>подскажите, как исправить?

выбрать инструмент (в данном случае ЯП) актуальным задаче. Вы-бы ещё на sed рекурсию сделали...

drBatty ★★
()

Не распарсил проблему.

Выполнять вызов функции в под-оболочке не поможет?

for it in ${data[@]}; do
   ( func ${it} )
done
schizoid ★★★
()
Ответ на: комментарий от AGUtilities

аа, протупил. просто поставь конструкции типа local var перед source script.sh

ну а вообще, да, - bash лучше не использовать для чего-то такого сложного.

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

не понял к чему это..

скрипт у меня подгружается так: ". ./$1.sh"

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

решил так:

   ...
   . ./$1.sh
   local _var1=$VAR1
   local _var2=$VAR2
   # и так для каждой переменной подгружаемой из скрипта
[[/code]]


всем спасибо.

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