<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Как передать несколько путей с пробелами через переменную?</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID15/4617.html</link>
    <description>пусть есть неопределённое количество путей к файлам или каталогам которое я получаю например от zenity. В путях могут быть пробелы. Мне нужно все эти пути передать какой либо команде, принимающей несколько путей разделённых пробелами.&lt;br&gt;Передавать придётся через переменную, как мне в неё записать эти пути, чтобы они верно передались?&lt;br&gt;вариант c заворачиванием путей в одинарные кавычки и всего этого в двойные кавычки&lt;br&gt;p=&quot; &apos;/п 1/ф 1&apos; &apos;/п 2/ф 2&apos; &quot;&lt;br&gt;ls $p&lt;br&gt;не прокатывает.&lt;br&gt;Как ещё можно завернуть пути с пробелами?&lt;br&gt;</description>

<item>
    <title>Как передать несколько путей с пробелами через переменную? (And)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID15/4617.html#22</link>
    <pubDate>Mon, 01 Jun 2020 18:14:41 GMT</pubDate>
    <description>&amp;gt; И IFS трогать ненужно и, по идее, там даже переносы строк &lt;br&gt;&amp;gt; не помеха.&lt;br&gt;&lt;br&gt;Да. Кавычки расставлены так, что при разворачивании всё оказывается целыми строками, независимо от наличия IFS или других специальных символов внутри значений. Различие между &#064; и * при развёртке массива.&lt;br&gt;&lt;br&gt;Не трогая IFS можно вот так (Zenity заменена на find, для примера):&lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;while read filename ; do&lt;br&gt;    echo &quot;I found name: &apos;$&#123;filename&#125;&apos;&quot;&lt;br&gt;done &amp;lt;&amp;lt;&amp;lt; &quot;$( find /tmp -maxdepth 1 )&quot;&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;В зависимости от реализации сам(и) IFS можно тронуть, если явно удобно. Если каждая строка это реально отдельный элемент массива (что не всегда), то можно вот так, с бэкапом IFS, если нужен:&lt;br&gt;&lt;br&gt;Синтаксис описан здесь: https://wiki.bash-hackers.org/syntax/arrays&lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;#!/bin/bash&lt;br&gt;&lt;br&gt;mkdir &quot;/tmp/asd fgh&quot; &quot;/tmp/qwe rty&quot;&lt;br&gt;&lt;br&gt;IFS_back=&quot;$&#123;IFS&#125;&quot;&lt;br&gt;IFS=$&apos;&#092;n&apos;&lt;br&gt;declare -a strings_array=($( ls -1 /tmp ))&lt;br&gt;for single_string in &quot;$&#123;strings_array&#091;&#064;&#093;&#125;&quot; ; do&lt;br&gt;    if &#091;&#091; &quot;$&#123;single_string&#125;&quot; =~ ^&quot;asd&quot;.*&amp;#124;.*&quot; rty&quot;$ &#093;&#093; ; then  # Прячу прочее содержимое св</description>
</item>

<item>
    <title>Как передать несколько путей с пробелами через переменную? (DiabloPC)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID15/4617.html#21</link>
    <pubDate>Mon, 01 Jun 2020 17:52:26 GMT</pubDate>
    <description>Ta там странностей немерено:&lt;br&gt;Тот вариант с массивами, что человек ниже предложил:&lt;br&gt;Если делать вот так&lt;br&gt;&#091;code&#093;declare -a array=(&quot;c 1&quot; &quot;c 2&quot;)&#091;/code&#093;&lt;br&gt;To всё работает и соответственно если сделать &lt;br&gt;&#091;code&#093;for i in $&#123;array&#091;&#064;&#093;&#125;; do&lt;br&gt;    echo $i&lt;br&gt;done&#091;/code&#093;&lt;br&gt;На выхлопе получим &lt;br&gt;&#091;code&#093;c 1&lt;br&gt;c 2&#091;/code&#093;&lt;br&gt;Но если сделать &lt;br&gt;&#091;code&#093;declare -a array=(&quot;$(zenity --file-selection --multiple --separator=&apos;&quot; &quot;&apos;)&quot;)&#091;/code&#093;&lt;br&gt;To в массив попадёт только один вот такой элемент:&lt;br&gt;&#091;code&#093;&quot;c 1&quot; &quot;c 2&quot;&#091;/code&#093;&lt;br&gt;Т.е если это писать руками всё норм, а если делать подстановку - весь выхлоп пишется как один элемент массива, хотя выхлоп подстановки соответствует тому что пишется руками и должен быть воспринят как несколько элементов. Но нет, оно его тащит как строку и хоть ты тресни &#037;)&lt;br&gt;</description>
</item>

<item>
    <title>Как передать несколько путей с пробелами через переменную? (inFlowiaLab)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID15/4617.html#20</link>
    <pubDate>Mon, 01 Jun 2020 10:54:04 GMT</pubDate>
    <description>&amp;gt; Работает в строчках которые запускают команды. В строчках которые присваивают значения, &lt;br&gt;&amp;gt; там странно.&lt;br&gt;&lt;br&gt;Из за этой странности не изменять IFS глобально не получится. Провёл много проб и понял, что пока не сделаешь так:&lt;br&gt;&#091;code&#093;&lt;br&gt;IFS=$&apos;&#092;n&apos; p=&apos;путь&lt;br&gt;путь&lt;br&gt;путь&apos;&lt;br&gt;IFS=$&apos;&#092;n&apos; ls $p&lt;br&gt;&#091;/code&#093;&lt;br&gt;ничего не заработает. То есть в любом случае при задании переменной прихоидится указывать IFS=$&apos;&#092;n&apos; а раз уж это всё равно глобально изменит IFS то смысла особого в этом нет.&lt;br&gt;&lt;br&gt;Очень всё это странно, потому что если менять IFS на весь скрипт и не парится, то можно задавать переменную с путём даже до изменения IFS.&lt;br&gt;</description>
</item>

<item>
    <title>Как передать несколько путей с пробелами через переменную? (DiabloPC)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID15/4617.html#19</link>
    <pubDate>Mon, 01 Jun 2020 09:37:13 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Конструкция $&apos;&#092;n&apos; это и есть перенос строки.&lt;br&gt;&amp;gt; Всё! Вот чего я не понимал в контексте проблемы с IFS=&apos;&#092;n&apos;. Что &lt;br&gt;&amp;gt; &#092;n заменяется на перенос строки только в одинарных кавычках и только &lt;br&gt;&amp;gt; если перед ними стоит $ &lt;br&gt;&lt;br&gt;Агась. А ниже вон человек самый правильный вариант для этого всего предложил. И IFS трогать ненужно и, по идее, там даже переносы строк не помеха.&lt;br&gt;</description>
</item>

<item>
    <title>Как передать несколько путей с пробелами через переменную? (DiabloPC)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID15/4617.html#18</link>
    <pubDate>Mon, 01 Jun 2020 09:27:13 GMT</pubDate>
    <description>Люто плюсую! &lt;br&gt;Массивы же зачем-то существуют))))&lt;br&gt;</description>
</item>

<item>
    <title>Как передать несколько путей с пробелами через переменную? (inFlowiaLab)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID15/4617.html#17</link>
    <pubDate>Mon, 01 Jun 2020 09:26:39 GMT</pubDate>
    <description>&amp;gt; Конструкция $&apos;&#092;n&apos; это и есть перенос строки.&lt;br&gt;&lt;br&gt;Всё! Вот чего я не понимал в контексте проблемы с IFS=&apos;&#092;n&apos;. Что &#092;n заменяется на перенос строки только в одинарных кавычках и только если перед ними стоит $&lt;br&gt;</description>
</item>

<item>
    <title>Как передать несколько путей с пробелами через переменную? (And)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID15/4617.html#16</link>
    <pubDate>Mon, 01 Jun 2020 09:07:16 GMT</pubDate>
    <description>&#091;code&#093;&lt;br&gt;#!/bin/bash&lt;br&gt;declare -a strings_array=(&quot;asd fgh&quot;  &quot;qwe rty&quot;)&lt;br&gt;for single_string in &quot;$&#123;strings_array&#091;&#064;&#093;&#125;&quot; ; do&lt;br&gt;    echo &quot;$single_string&quot;&lt;br&gt;done&lt;br&gt;&#091;/code&#093;&lt;br&gt;&lt;br&gt;&#091;code&#093;&lt;br&gt;#!/bin/bash&lt;br&gt;declare -a strings_array=(&quot;asd fgh&quot;  &quot;qwe rty&quot;)&lt;br&gt;cd /tmp&lt;br&gt;mkdir &quot;$&#123;strings_array&#091;&#064;&#093;&#125;&quot;&lt;br&gt;ls -ld &quot;/tmp/asd fgh&quot;&lt;br&gt;ls -ld &quot;/tmp/qwe rty&quot;&lt;br&gt;&#091;/code&#093;&lt;br&gt;</description>
</item>

<item>
    <title>Как передать несколько путей с пробелами через переменную? (DiabloPC)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID15/4617.html#15</link>
    <pubDate>Mon, 01 Jun 2020 05:30:55 GMT</pubDate>
    <description>Потому что не ls &apos;c 1 c 2&apos;, a ls &quot;c 1&quot; &quot;c 2&quot; или &apos;c 1&apos; &apos;c 2&apos;.&lt;br&gt;Конструкция $&apos;&#092;n&apos; это и есть перенос строки. &lt;br&gt;&lt;br&gt;В варианте &#091;code&#093;&apos;c 1&lt;br&gt;c 2&apos;&#091;/code&#093; оно какраз пытается найти двухэтажное имя.&lt;br&gt;т.е:&lt;br&gt;&#091;code&#093;&apos;c 1&lt;br&gt;c 2&apos; == &apos;c 1&apos;$&apos;&#092;n&apos;&apos;c 2&apos;&lt;br&gt;&lt;br&gt;a&lt;br&gt;&lt;br&gt;&apos;c 1&apos;&lt;br&gt;&apos;c 2&apos; == &apos;&quot;c 1&quot;&lt;br&gt;&quot;c 2&quot;&apos; &#091;/code&#093;Т.е в кавычки либо не брать вообще, либо имя каждого каталога отдельно.&lt;br&gt;&lt;br&gt;&#091;code&#093;&#091; diablopc&#064;d200 ~/test &#093;$ cat test.sh &lt;br&gt;#!/bin/bash&lt;br&gt;IFS=$&apos;&#092;n&apos;&lt;br&gt;SELECTION=$(zenity --file-selection --directory --multiple --separator=&quot;$IFS&quot; --title=&quot;olololo&quot;)&lt;br&gt;ls $SELECTION&lt;br&gt;&lt;br&gt;&lt;br&gt;&#091; diablopc&#064;d200 ~/test &#093;$ ./test.sh &lt;br&gt;&apos;/home/diablopc/test/c 1&apos;:&lt;br&gt;1_1  1_2&lt;br&gt;&lt;br&gt;&apos;/home/diablopc/test/c 2&apos;:&lt;br&gt;2_1  2_2&#091;/code&#093;&lt;br&gt;</description>
</item>

<item>
    <title>Как передать несколько путей с пробелами через переменную? (DiabloPC)</title>
    <link>https://www.opennet.dev/openforum/vsluhforumID15/4617.html#14</link>
    <pubDate>Mon, 01 Jun 2020 05:23:07 GMT</pubDate>
    <description>&amp;gt;&amp;gt; А зачем внутри одного скрипта плодить несколько вариантов IFS (да и любых &lt;br&gt;&amp;gt;&amp;gt; других переменных тоже)? После завершения работы скрипта оболочка всеравно вернётся к &lt;br&gt;&amp;gt;&amp;gt; дефолту (ес-сно если не юзать export).&lt;br&gt;&amp;gt; Если скрипт небольшой, то пофигу.&lt;br&gt;&amp;gt; А если большой, то имеет смысл стараться держать окружение максимально близким к &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;Имхо, в рамках одного скрипта проще такое делать для всего скрипта. Т.е установить переменную в самом начале и помнить что в этом скрипте IFS это перенос строки, а не пробел, а не сидеть потом через пару сотен строк и не офигевать почему оно вдруг работает не так как ожидалось, а оказывается мы где-то там забыли сбросить переменную до пробела. Оно вроди и мелочь, но на отладке такого потом глаза могут пов</description>
</item>

</channel>
</rss>
