<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Массивы в shell. Непонятный момент.</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9280.html</link>
    <description>Здравствуйте,&lt;br&gt;&lt;br&gt;заполняю массив целыми числами в следующем цикле. Работает как ожидается.&lt;br&gt;&lt;br&gt;n=0&lt;br&gt;for line in 3 5 8; do&lt;br&gt;    nums&#091;$n&#093;=$line&lt;br&gt;    ((n=$n+1))&lt;br&gt;done&lt;br&gt;printf &quot;length: &#037;s&#092;n&quot; $&#123;#nums&#091;&#064;&#093;&#125;  ## печатает 3&lt;br&gt;&lt;br&gt;Если меняю строчку for на следующие&lt;br&gt;&lt;br&gt;cat $file &amp;#124;&lt;br&gt;while read line; do&lt;br&gt;&lt;br&gt;где $file - имя файла со значениями в виде&lt;br&gt;3&lt;br&gt;5&lt;br&gt;8&lt;br&gt;&lt;br&gt;то в результате массив nums по выходу из цикла остается нулевым.&lt;br&gt;&lt;br&gt;Не могу понять в чем различие. Внутри цикла массив изменяется как положено.&lt;br&gt;&lt;br&gt;$BASH_VERSION: 3.2.48(1)-release&lt;br&gt;</description>

<item>
    <title>Массивы в shell. Непонятный момент. (shadowmaan)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9280.html#2</link>
    <pubDate>Sun, 13 Nov 2011 08:12:38 GMT</pubDate>
    <description>&amp;gt; Вы наступили на старые проверенные грабли. :-) &lt;br&gt;&amp;gt; Дело в том, что пользуясь конвейером, вы запускаете цикл в отдельном &lt;br&gt;&amp;gt; экземпляре bash и когда цикл отрабатывает, то этот самый отдельный экземпляр &lt;br&gt;&amp;gt; закрывается, унося в небытие все наработанные в нем данные. Попробуйте вместо &lt;br&gt;&amp;gt; конвейера &#091;b&#093;cat &amp;#124; while&#091;/b&#093; использовать перенаправление: &lt;br&gt;&amp;gt; &#091;code&#093; &lt;br&gt;&amp;gt; while read line; do &lt;br&gt;&amp;gt; . . .&lt;br&gt;&amp;gt; done &amp;lt; $file &lt;br&gt;&amp;gt; &#091;/code&#093; &lt;br&gt;&lt;br&gt;Да, действительно, с перенаправлением работает.&lt;br&gt;&lt;br&gt;Было у меня подозрение об отдельном экземпляре, но не смог этого проверить.&lt;br&gt;$$ и в цикле и вне его возвращало тот же id. Ничего другого не придумал :)&lt;br&gt;&lt;br&gt;Спасибо.&lt;br&gt;</description>
</item>

<item>
    <title>Массивы в shell. Непонятный момент. (allez)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9280.html#1</link>
    <pubDate>Sun, 13 Nov 2011 01:42:46 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; Если меняю строчку for на следующие &lt;br&gt;&amp;gt; cat $file &amp;#124; &lt;br&gt;&amp;gt; while read line; do &lt;br&gt;&amp;gt; где $file - имя файла со значениями в виде &lt;br&gt;&amp;gt; 3 &lt;br&gt;&amp;gt; 5 &lt;br&gt;&amp;gt; 8 &lt;br&gt;&amp;gt; то в результате массив nums по выходу из цикла остается нулевым.&lt;br&gt;&amp;gt; Не могу понять в чем различие. Внутри цикла массив изменяется как положено. &lt;br&gt;&amp;gt; $BASH_VERSION: 3.2.48(1)-release &lt;br&gt;&lt;br&gt;Вы наступили на старые проверенные грабли. :-)&lt;br&gt;Дело в том, что пользуясь конвейером, вы запускаете цикл в отдельном &lt;br&gt;экземпляре bash и когда цикл отрабатывает, то этот самый отдельный экземпляр &lt;br&gt;закрывается, унося в небытие все наработанные в нем данные. Попробуйте вместо &lt;br&gt;конвейера &#091;b&#093;cat &amp;#124; while&#091;/b&#093; использовать перенаправление:&lt;br&gt;&#091;code&#093;&lt;br&gt;while read line; do&lt;br&gt;. . .&lt;br&gt;done &amp;lt; $file&lt;br&gt;&#091;/code&#093;&lt;br&gt;</description>
</item>

</channel>
</rss>
