The OpenNET Project / Index page

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

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

"bash теряет значения переменных после while"  
Сообщение от mdmitriy email(ok) on 28-Мрт-08, 09:09 
Добрый день, уважаемые гуру скриптинга. Не объясните, почем bash теряет значения переменных после цикла while do. И как этого избежать. Заранее благодарен. Кусок скрипта далее:

snmpwalk -c public 192.168.1.1 1.3.6.1.2.1.17.4.3.1.2 | while read line
do
length=${#line}
position=$(($length-1))
port_number=${line:$position:1}
mac_number[8]=10
#echo ${mac_number[8]}
done
echo "${mac_number[8]}"

Вывод внутри цикла - полет нормальный, как только выходим из цикла, весь массив очищается.
Да и все остальные переменные тоже.

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

 Оглавление

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


1. "bash теряет значения переменных после while"  
Сообщение от stas (??) on 28-Мрт-08, 09:48 
>[оверквотинг удален]
>position=$(($length-1))
>port_number=${line:$position:1}
>mac_number[8]=10
>#echo ${mac_number[8]}
>done
>echo "${mac_number[8]}"
>
>Вывод внутри цикла - полет нормальный, как только выходим из цикла, весь
>массив очищается.
>Да и все остальные переменные тоже.

Попробуйте так:
while read line
do
length=${#line}
position=$(($length-1))
port_number=${line:$position:1}
mac_number[8]=10
#echo ${mac_number[8]}
done < <(snmpwalk -c public 192.168.1.1 1.3.6.1.2.1.17.4.3.1.2)
echo "${mac_number[8]}"

Как у вас, bash запускает цикл в дочернем процессе.

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

2. "bash теряет значения переменных после while"  
Сообщение от mdmitriy email(ok) on 28-Мрт-08, 10:28 
Благодарю. Помогло, правда "выжили" после цикла только задекларированны переменные, внутренние переменные цикла все равно очищаются. Интересное конечно поведение шелла...


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

3. "bash теряет значения переменных после while"  
Сообщение от Oyyo on 28-Мрт-08, 10:29 
>[оверквотинг удален]
>>position=$(($length-1))
>>port_number=${line:$position:1}
>>mac_number[8]=10
>>#echo ${mac_number[8]}
>>done
>>echo "${mac_number[8]}"
>>
>>Вывод внутри цикла - полет нормальный, как только выходим из цикла, весь
>>массив очищается.
>>Да и все остальные переменные тоже.

======
>
>Попробуйте так:
>while read line
>do
>length=${#line}
>position=$(($length-1))
>port_number=${line:$position:1}

=====
>mac_number[8]=10
>#echo ${mac_number[8]}
>done < <(snmpwalk -c public 192.168.1.1 1.3.6.1.2.1.17.4.3.1.2)
>echo "${mac_number[8]}"
>
>Как у вас, bash запускает цикл в дочернем процессе.

ну, и с тем же успехом

всё, что обрабатывается внутри процесса по окнчании процесса не сохраняется и не может сохранится (разве что, значения из последней строки цикла, но баш этого не делает)
создав переменную до начала процесса, обработай её внутри процесса, по окончании переменная принимает то значение которое было до начала процесса
ВЫВОД - если нужно сохранить массив после окончания процесса "while", создайте его до начала процесса
i=( snmpwalk -c public 192.168.1.1 1.3.6.1.2.1.17.4.3.1.2 )

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

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

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




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

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