On 30/11/16 10:25 AM, Andrey Tataranovich wrote:
> Доброго времени суток.
>
> В shell скрипте обрабатывается список в котором в качестве разделителя
> используется нулевой символ '\0'. Вроде совместимо с POSIX, но нужное
> поведение есть только в zsh. В bash и dash ведет себя неправильно.
>
> Код -------------------------------------------------------------------
> IFS=$(printf '\0')
> for i in $(seq 1 10 | tr '\n' '\0')
> do
>     echo "i = $i"
> done
>
> Вывод -----------------------------------------------------------------
> zsh /tmp/list.sh
> i = 1
> i = 2
> i = 3
> i = 4
> i = 5
> i = 6
> i = 7
> i = 8
> i = 9
> i = 10
> i =
>
> bash /tmp/list.sh
> i = 12345678910
>
> dash /tmp/list.sh
> i = 12345678910
>
> Пробовал различные варианты задания IFS: IFS=; IFS=''; IFS=$'\0';
> IFS=$(echo -en "\0") и т.д., но это не решает проблему.
>
> Как обойти проблему с помощью того же xargs или while/read я знаю. Меня
> интересует почему не работает вариант с for. Подозреваю, что я где-то
> заблуждаюсь и потому у меня не работает - может кто-то подскажет в чем
> моя ошибка?
>

Нашёл такой же вопрос, буквально один в один, на стэковерфлоу:
http://stackoverflow.com/questions/8677546/bash-for-in-looping-on-null-delimited-string-variable

Ответить