The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Теряется значение переменной при выходе из цикла"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Теряется значение переменной при выходе из цикла"  
Сообщение от Pikador (ok) on 17-Авг-06, 10:37 
# cat ./tmp.sh
#!/bin/sh

cat ./List | while read SwIP SwPlace; do
   cat ./nettree | while read NetTreeSwPlace NetTreeParent; do
      if [ ${SwPlace} = ${NetTreeSwPlace} ]; then
         Parent=${NetTreeParent}
         echo Этому ${SwPlace} соответствует  ${Parent}
         break
      fi
   done
   echo "----- вне цикла  Этому ${SwPlace} соответствует ${Parent}"
done

Предпоследнее эхо выдает значения обеих переменных, а уже последнее только значение ${SwPlace}. ${Parent} почемуто обнуляется.

Результат работы:
# ./tmp.sh
----- вне цикла  Этому Lnn66-p5 соответствует
Этому Lnn68-p3 соответствует Lnn68-p6
----- вне цикла  Этому Lnn68-p3 соответствует
                                              ^^^^^^^ Отсутствует
----- вне цикла  Этому Unv5-p9 соответствует
----- вне цикла  Этому Lnn64-p9 соответствует
----- вне цикла  Этому Lnn62-p13 соответствует
----- вне цикла  Этому Lnn62-p6 соответствует
----- вне цикла  Этому Lmm18-p6 соответствует
Этому Lmm18-p12 соответствует Lmm18-p9
----- вне цикла  Этому Lmm18-p12 соответствует
                                               ^^^^^^^ Отсутствует
----- вне цикла  Этому Lmm18-p4 соответствует
Этому Lmm18-p9 соответствует Lmm18-p6
----- вне цикла  Этому Lmm18-p9 соответствует
                                              ^^^^^^^ Отсутствует
----- вне цикла  Этому Lmm23-p13 соответствует
----- вне цикла  Этому Lmm23-p9 соответствует

Содержимое файлов:
# cat ./List
192.168.4.3     Lnn66-p5
192.168.4.4     Lnn68-p3
192.168.4.5     Unv5-p9
192.168.4.6     Lnn64-p9
192.168.4.7     Lnn62-p13
192.168.4.9     Lnn62-p6
192.168.4.35    Lmm18-p6
192.168.4.36    Lmm18-p12
192.168.4.39    Lmm18-p4
192.168.4.40    Lmm18-p9
192.168.4.67    Lmm23-p13
192.168.4.69    Lmm23-p9

# cat ./nettree
Lnn66-p6        Lnn66-p7
Lnn66-p7        Lnn66-p5
Lnn66-p8        Lnn66-p7
Lnn66-p9        Lnn66-p10
Lnn66-p10       Lnn66-p7
Lnn66-p11       Lnn66-p10
Lnn66-p12       Lnn66-p10
Lnn62-p14       Lnn62-p13
Lnn62-p15       Lnn62-p13
Lnn62-p16       Lnn62-p13
Lnn62-p17       Lnn62-p16
Lnn62-p18       Lnn62-p16
Lnn68-p1        Lnn68-p3
Lnn68-p2        Lnn68-p3
Lnn68-p3        Lnn68-p6
Lmm18-p9        Lmm18-p6
Lmm18-p10       Lmm18-p9
Lmm18-p11       Lmm18-p12
Lmm18-p12       Lmm18-p9
Lmm23-p15       Lmm23-p17
Lmm23-p16       Lmm23-p17
Lmm23-p17       Lmm23-p14
Lmm23-p18       Lmm23-p17
Lmm23-p20       Lmm23-p21


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Теряется значение переменной при выходе из цикла"  
Сообщение от gyn61 (ok) on 17-Авг-06, 11:03 
#!/bin/sh

while read SwIP SwPlace; do
   while read NetTreeSwPlace NetTreeParent; do
      if [ ${SwPlace} = ${NetTreeSwPlace} ];
then
         Parent=${NetTreeParent}
         echo Этому ${SwPlace} соответствует  ${Parent}
         break
      fi
   done < ./nettree
   echo "----- вне цикла  Этому ${SwPlace} соответствует ${Parent}"

done < ./List

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Теряется значение переменной при выходе из цикла"  
Сообщение от Pikador (ok) on 17-Авг-06, 11:26 
>#!/bin/sh
>
>while read SwIP SwPlace; do
>   while read NetTreeSwPlace NetTreeParent; do
>      if [ ${SwPlace} = ${NetTreeSwPlace} ];
>
>then
>         Parent=${NetTreeParent}
>         echo Этому ${SwPlace}
>соответствует  ${Parent}
>         break
>      fi
>   done < ./nettree
>   echo "----- вне цикла  Этому ${SwPlace} соответствует ${Parent}"
>
>
>done < ./List

Хм, как ни странно заработало, спсибо. А в чем причина неработоспособности моего варианта не подскажите?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Теряется значение переменной при выходе из цикла"  
Сообщение от gyn61 (ok) on 17-Авг-06, 11:28 
>Хм, как ни странно заработало, спсибо. А в чем причина неработоспособности моего
>варианта не подскажите?

Там из-за конвейеров порождались субшеллы.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Теряется значение переменной при выходе из цикла"  
Сообщение от Pikador (ok) on 17-Авг-06, 12:19 
>>Хм, как ни странно заработало, спсибо. А в чем причина неработоспособности моего
>>варианта не подскажите?
>
>Там из-за конвейеров порождались субшеллы.


Я предполагал, что они появлялись из-за циклов. А нельзя ли перекидывать переменные между субшелами? Пытался использовать export  да чет не прокатило...

PS К стати, заработало даже при изменении только внутреннего цикла.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Теряется значение переменной при выходе из цикла"  
Сообщение от gyn61 (ok) on 17-Авг-06, 23:51 
>Я предполагал, что они появлялись из-за циклов. А нельзя ли перекидывать переменные
>между субшелами? Пытался использовать export  да чет не прокатило...

Из родительского шелла в субшелл переменные и так передаются. Получить значение переменных из субшелла в родительский шелл стандартными методами невозможно (под нестандартными методами я понимаю трюки с временными файлами, перенаправлением вывода, фифо и т.д.).

>
>PS К стати, заработало даже при изменении только внутреннего цикла.

Ну это понятно. Вам же нужно было значение переменной получить _внутри_ внешнего цикла.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "Теряется значение переменной при выходе из цикла"  
Сообщение от Pikador (ok) on 18-Авг-06, 10:56 
>>Я предполагал, что они появлялись из-за циклов. А нельзя ли перекидывать переменные
>>между субшелами? Пытался использовать export  да чет не прокатило...
>
>Из родительского шелла в субшелл переменные и так передаются. Получить значение переменных
>из субшелла в родительский шелл стандартными методами невозможно (под нестандартными методами
>я понимаю трюки с временными файлами, перенаправлением вывода, фифо и т.д.).
>
>
>>
>>PS К стати, заработало даже при изменении только внутреннего цикла.
>
>Ну это понятно. Вам же нужно было значение переменной получить _внутри_ внешнего
>цикла.

Спасибо за содержательный ответ.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру