<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: bash теряет значения переменных после while</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID1/79510.html</link>
    <description>Добрый день, уважаемые гуру скриптинга. Не объясните, почем bash теряет значения переменных после цикла while do. И как этого избежать. Заранее благодарен. Кусок скрипта далее:&lt;br&gt;&lt;br&gt;snmpwalk -c public 192.168.1.1 1.3.6.1.2.1.17.4.3.1.2 &amp;#124; while read line&lt;br&gt;do&lt;br&gt;length=$&#123;#line&#125;&lt;br&gt;position=$(($length-1))&lt;br&gt;port_number=$&#123;line:$position:1&#125;&lt;br&gt;mac_number&#091;8&#093;=10&lt;br&gt;#echo $&#123;mac_number&#091;8&#093;&#125;&lt;br&gt;done&lt;br&gt;echo &quot;$&#123;mac_number&#091;8&#093;&#125;&quot;&lt;br&gt;&lt;br&gt;Вывод внутри цикла - полет нормальный, как только выходим из цикла, весь массив очищается.&lt;br&gt;Да и все остальные переменные тоже.&lt;br&gt;</description>

<item>
    <title>bash теряет значения переменных после while (Oyyo)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID1/79510.html#3</link>
    <pubDate>Fri, 28 Mar 2008 07:29:47 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt;position=$(($length-1)) &lt;br&gt;&amp;gt;&amp;gt;port_number=$&#123;line:$position:1&#125; &lt;br&gt;&amp;gt;&amp;gt;mac_number&#091;8&#093;=10 &lt;br&gt;&amp;gt;&amp;gt;#echo $&#123;mac_number&#091;8&#093;&#125; &lt;br&gt;&amp;gt;&amp;gt;done &lt;br&gt;&amp;gt;&amp;gt;echo &quot;$&#123;mac_number&#091;8&#093;&#125;&quot; &lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;Вывод внутри цикла - полет нормальный, как только выходим из цикла, весь &lt;br&gt;&amp;gt;&amp;gt;массив очищается. &lt;br&gt;&amp;gt;&amp;gt;Да и все остальные переменные тоже. &lt;br&gt;&lt;br&gt;======&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Попробуйте так: &lt;br&gt;&amp;gt;while read line &lt;br&gt;&amp;gt;do &lt;br&gt;&amp;gt;length=$&#123;#line&#125; &lt;br&gt;&amp;gt;position=$(($length-1)) &lt;br&gt;&amp;gt;port_number=$&#123;line:$position:1&#125; &lt;br&gt;&lt;br&gt;=====&lt;br&gt;&amp;gt;mac_number&#091;8&#093;=10 &lt;br&gt;&amp;gt;#echo $&#123;mac_number&#091;8&#093;&#125; &lt;br&gt;&amp;gt;done &amp;lt; &amp;lt;(snmpwalk -c public 192.168.1.1 1.3.6.1.2.1.17.4.3.1.2) &lt;br&gt;&amp;gt;echo &quot;$&#123;mac_number&#091;8&#093;&#125;&quot; &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Как у вас, bash запускает цикл в дочернем процессе. &lt;br&gt;&lt;br&gt;ну, и с тем же успехом&lt;br&gt;&lt;br&gt;всё, что обрабатывается внутри процесса по окнчании процесса не сохраняется и не может сохранится (разве что, значения из последней строки цикла, но баш этого не делает)&lt;br&gt;создав переменную до начала процесса, обработай её внутри процесса, по окончании переменная принимает то значение которое было до начала процесса&lt;br&gt;ВЫВОД - если нужно </description>
</item>

<item>
    <title>bash теряет значения переменных после while (mdmitriy)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID1/79510.html#2</link>
    <pubDate>Fri, 28 Mar 2008 07:28:02 GMT</pubDate>
    <description>Благодарю. Помогло, правда &quot;выжили&quot; после цикла только задекларированны переменные, внутренние переменные цикла все равно очищаются. Интересное конечно поведение шелла...&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>bash теряет значения переменных после while (stas)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID1/79510.html#1</link>
    <pubDate>Fri, 28 Mar 2008 06:48:51 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;position=$(($length-1)) &lt;br&gt;&amp;gt;port_number=$&#123;line:$position:1&#125; &lt;br&gt;&amp;gt;mac_number&#091;8&#093;=10 &lt;br&gt;&amp;gt;#echo $&#123;mac_number&#091;8&#093;&#125; &lt;br&gt;&amp;gt;done &lt;br&gt;&amp;gt;echo &quot;$&#123;mac_number&#091;8&#093;&#125;&quot; &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Вывод внутри цикла - полет нормальный, как только выходим из цикла, весь &lt;br&gt;&amp;gt;массив очищается. &lt;br&gt;&amp;gt;Да и все остальные переменные тоже. &lt;br&gt;&lt;br&gt;Попробуйте так:&lt;br&gt;while read line &lt;br&gt;do &lt;br&gt;length=$&#123;#line&#125; &lt;br&gt;position=$(($length-1)) &lt;br&gt;port_number=$&#123;line:$position:1&#125; &lt;br&gt;mac_number&#091;8&#093;=10 &lt;br&gt;#echo $&#123;mac_number&#091;8&#093;&#125; &lt;br&gt;done &amp;lt; &amp;lt;(snmpwalk -c public 192.168.1.1 1.3.6.1.2.1.17.4.3.1.2)&lt;br&gt;echo &quot;$&#123;mac_number&#091;8&#093;&#125;&quot; &lt;br&gt;&lt;br&gt;Как у вас, bash запускает цикл в дочернем процессе.&lt;br&gt;</description>
</item>

</channel>
</rss>
