<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Вернуть объект из функции на Shell. Чем заменить, как делают?</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9959.html</link>
    <description>В языках программирования функции могут возвращать &quot;сложные&quot; объекты. Массивы, хэши-словари. Есть что-то похожее для Shell (Bash, или иное)?&lt;br&gt;&lt;br&gt;Я пробежался поиском - не увидел как сделать так, что код можно быстро будет понять через полчаса после написания. :)&lt;br&gt;&lt;br&gt;Я так понимаю, что правильный ответ - Perl, с выключенными &quot;предохранителями&quot;. Там можно всё нужное, да. Именно. Но вопрос таки про Bash или иной распространённый Shell.&lt;br&gt;&lt;br&gt;Может быть есть какой-то известный, распространённый стиль/стратегия, которые позволяют обойтись?&lt;br&gt;&lt;br&gt;Есть вот такой код (Bash 4):&lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;#!/bin/bash&lt;br&gt;&lt;br&gt;set -x&lt;br&gt;set -e&lt;br&gt;&lt;br&gt;declare -r fileTmpA=&quot;/tmp/$( basename &quot;$&#123;0&#125;&quot; )_A&quot;&lt;br&gt;declare -r fileTmpB=&quot;/tmp/$( basename &quot;$&#123;0&#125;&quot; )_B&quot;&lt;br&gt;trap &quot;rm &apos;$&#123;fileTmpA&#125;&apos; &apos;$&#123;fileTmpB&#125;&apos;&quot; EXIT HUP INT TERM&lt;br&gt;&lt;br&gt;&lt;br&gt;################################################&lt;br&gt;&lt;br&gt;&lt;br&gt;declare -A dictionary_A&lt;br&gt;declare -A dictionary_B&lt;br&gt;&lt;br&gt;echo -ne &quot;0000&#092;n1111&#092;n&quot; &amp;gt; &quot;$&#123;fileTmpA&#125;&quot;&lt;br&gt;echo -ne &quot;2222&#092;n3333&#092;n&quot; &amp;gt; &quot;$&#123;fileTmpB&#125;&quot;&lt;br&gt;&lt;br&gt;while read value ; do&lt;br&gt;    key=&quot;$( echo &quot;$&#123;value&#125;&quot; &amp;#124; m</description>

<item>
    <title>Вернуть объект из функции на Shell. Чем заменить, как делают? (fantom)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9959.html#4</link>
    <pubDate>Tue, 30 Dec 2014 15:14:22 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; последовательности - оно сломается ведь?&lt;br&gt;&amp;gt; Интересно словарь &quot;вернуть&quot; из функции. Не просто массив, &lt;br&gt;&amp;gt; &#091;b&#093;declare -a ARRAY=(E1 E2 &amp;#8230;)&#091;/b&#093; &lt;br&gt;&amp;gt; а словарь &lt;br&gt;&amp;gt; &#091;b&#093;declare -A ARRAY=(&#091;X&#093;=E1 &#091;Y&#093;=E2 &amp;#8230;)&#091;/b&#093; &lt;br&gt;&amp;gt; Если &quot;$&#123;dict&#091;&#064;&#093;&#125;&quot; разворачивается как независимые строки, по одной строке на элемент, то &lt;br&gt;&amp;gt; приставка echo склеивает всё в одну строку. Потеря информации.&lt;br&gt;&amp;gt; Можно пытаться расставлять экраны и кавычки/апострофы, но не знаю простого и читаемого &lt;br&gt;&amp;gt; способа сделать это. Хорошо бы ещё и быстрого, т.к. вызов sed &lt;br&gt;&amp;gt; и т.п. довольно долго происходит.&lt;br&gt;&lt;br&gt;&#092;r добавляешь в конец каждого элемента, и echo нарисует как надо..&lt;br&gt;</description>
</item>

<item>
    <title>Вернуть объект из функции на Shell. Чем заменить, как делают? (pavlinux)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9959.html#3</link>
    <pubDate>Mon, 29 Dec 2014 18:43:53 GMT</pubDate>
    <description>&amp;gt; Хорошо бы ещё и быстрого, т.к. вызов sed и т.п. довольно долго происходит.&lt;br&gt;&lt;br&gt;Хе... Вот те задачка на ассоциативные массивы: &lt;br&gt;&lt;br&gt;Заменить в тексте все буквы русского алфавита на схожие по-написанию латинские. Только bash.&lt;br&gt;&lt;br&gt;#!/bin/bash&lt;br&gt;&lt;br&gt;RUS_CAP=(А В Е К М Н О Р С Т Х)&lt;br&gt;LAT_CAP=(A B E K M H O P C T X)&lt;br&gt;&lt;br&gt;RUS_LET=(а е о р с у х)&lt;br&gt;LAT_LET=(a e o p c y x)&lt;br&gt;&lt;br&gt;Текст: &lt;br&gt;http://vojnaimir.ru/files/book1.txt.zip&lt;br&gt;http://vojnaimir.ru/files/book2.txt.zip&lt;br&gt;&lt;br&gt;$ unzip -c book1.txt.zip &amp;#124; iconv -f cp1251 -t utf8 &amp;gt; BOOK.txt &lt;br&gt;$ unzip -c book2.txt.zip &amp;#124; iconv -f cp1251 -t utf8 &amp;gt;&amp;gt; BOOK.txt &lt;br&gt;&lt;br&gt;$ time cat BOOK.txt &amp;#124; convert.sh;&lt;br&gt;&lt;br&gt;и показываешь тут время.&lt;br&gt; &lt;br&gt;&lt;br&gt;---&lt;br&gt;В гугл не подсматривать. &lt;br&gt;&lt;br&gt;----&lt;br&gt;&lt;br&gt;Ну чтоб сразу расстроился :-P&lt;br&gt;&lt;br&gt;$ time cat BOOK.txt &amp;#124; sed &apos;y/АВЕКМНОРСТХаеорсух/ABEKMHOPCTXaeopcyx/&apos; &amp;gt; bebebe&lt;br&gt;&lt;br&gt;real    0m1.593s&lt;br&gt;user    0m1.565s&lt;br&gt;sys     0m0.036s&lt;br&gt;</description>
</item>

<item>
    <title>Вернуть объект из функции на Shell. Чем заменить, как делают? (AV)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9959.html#2</link>
    <pubDate>Sun, 28 Dec 2014 12:32:32 GMT</pubDate>
    <description>Если в строках будут пробелы, спец. символы и инструкции Shell или esc последовательности - оно сломается ведь?&lt;br&gt;&lt;br&gt;Интересно словарь &quot;вернуть&quot; из функции. Не просто массив,&lt;br&gt;&#091;b&#093;declare -a ARRAY=(E1 E2 &amp;#8230;)&#091;/b&#093; &lt;br&gt;а словарь&lt;br&gt;&#091;b&#093;declare -A ARRAY=(&#091;X&#093;=E1 &#091;Y&#093;=E2 &amp;#8230;)&#091;/b&#093;&lt;br&gt;&lt;br&gt;Если &quot;$&#123;dict&#091;&#064;&#093;&#125;&quot; разворачивается как независимые строки, по одной строке на элемент, то приставка echo склеивает всё в одну строку. Потеря информации.&lt;br&gt;&lt;br&gt;Можно пытаться расставлять экраны и кавычки/апострофы, но не знаю простого и читаемого способа сделать это. Хорошо бы ещё и быстрого, т.к. вызов sed и т.п. довольно долго происходит.&lt;br&gt;</description>
</item>

<item>
    <title>Вернуть объект из функции на Shell. Чем заменить, как делают? (pavlinux)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/9959.html#1</link>
    <pubDate>Sat, 27 Dec 2014 22:04:10 GMT</pubDate>
    <description>&amp;gt; Bash так не умеет,&lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;#!/bin/bash&lt;br&gt;&lt;br&gt;set -e &lt;br&gt;set -x&lt;br&gt;&lt;br&gt;fileTmpA=&quot;/tmp/$(basename $0)_A&quot;&lt;br&gt;fileTmpB=&quot;/tmp/$(basename $0)_B&quot;&lt;br&gt;&lt;br&gt;trap &quot;rm $fileTmpA $fileTmpB&quot; EXIT HUP INT TERM&lt;br&gt;&lt;br&gt;################################################&lt;br&gt;&lt;br&gt;function fDFF &#123;&lt;br&gt;&lt;br&gt;    local i=0;&lt;br&gt;    local -a dict=();&lt;br&gt;&lt;br&gt;    for string in $(cat $1)&lt;br&gt;        do&lt;br&gt;           key=$(echo $string &amp;#124; md5sum &amp;#124; cut -d&apos; &apos; -f1);&lt;br&gt;           dict&#091;$i&#093;=$key;&lt;br&gt;           ((i++));&lt;br&gt;    done;&lt;br&gt; echo $&#123;dict&#091;&#064;&#093;&#125;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;echo -ne &quot;0000&#092;n1111&quot; &amp;gt; $fileTmpA;&lt;br&gt;echo -ne &quot;2222&#092;n3333&quot; &amp;gt; $fileTmpB;&lt;br&gt;&lt;br&gt;declare -a dictionary_A=($(fDFF $fileTmpA));&lt;br&gt;declare -a dictionary_B=($(fDFF $fileTmpB));&lt;br&gt;&lt;br&gt;################################################&lt;br&gt;&lt;br&gt;echo &quot;________________________________________________&quot;&lt;br&gt;&lt;br&gt;for key in &quot;$&#123;dictionary_A&#091;&#064;&#093;&#125;&quot; &quot;$&#123;dictionary_B&#091;&#064;&#093;&#125;&quot; ;&lt;br&gt;   do&lt;br&gt;        echo &quot;Have key: $&#123;key&#125;&quot;&lt;br&gt;done&lt;br&gt;&#091;/code&#093;&lt;br&gt;________________________________&lt;br&gt;Have key: 4c3cbcadf7b8a9ae2932afc00560a0d6&lt;br&gt;Have key: 1f18348f32c9a4694f16426798937ae2&lt;br&gt;Have key: 9dc23e23a8423</description>
</item>

</channel>
</rss>
