# cat ./tmp.sh
#!/bin/shcat ./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
#!/bin/shwhile 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
>#!/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Хм, как ни странно заработало, спсибо. А в чем причина неработоспособности моего варианта не подскажите?
>Хм, как ни странно заработало, спсибо. А в чем причина неработоспособности моего
>варианта не подскажите?Там из-за конвейеров порождались субшеллы.
>>Хм, как ни странно заработало, спсибо. А в чем причина неработоспособности моего
>>варианта не подскажите?
>
>Там из-за конвейеров порождались субшеллы.
Я предполагал, что они появлялись из-за циклов. А нельзя ли перекидывать переменные между субшелами? Пытался использовать export да чет не прокатило...PS К стати, заработало даже при изменении только внутреннего цикла.
>Я предполагал, что они появлялись из-за циклов. А нельзя ли перекидывать переменные
>между субшелами? Пытался использовать export да чет не прокатило...Из родительского шелла в субшелл переменные и так передаются. Получить значение переменных из субшелла в родительский шелл стандартными методами невозможно (под нестандартными методами я понимаю трюки с временными файлами, перенаправлением вывода, фифо и т.д.).
>
>PS К стати, заработало даже при изменении только внутреннего цикла.Ну это понятно. Вам же нужно было значение переменной получить _внутри_ внешнего цикла.
>>Я предполагал, что они появлялись из-за циклов. А нельзя ли перекидывать переменные
>>между субшелами? Пытался использовать export да чет не прокатило...
>
>Из родительского шелла в субшелл переменные и так передаются. Получить значение переменных
>из субшелла в родительский шелл стандартными методами невозможно (под нестандартными методами
>я понимаю трюки с временными файлами, перенаправлением вывода, фифо и т.д.).
>
>
>>
>>PS К стати, заработало даже при изменении только внутреннего цикла.
>
>Ну это понятно. Вам же нужно было значение переменной получить _внутри_ внешнего
>цикла.Спасибо за содержательный ответ.