Andrey Tataranovich -> debian-russian @ Wed, 30 Nov 2016 18:25:40 +0300:
> Доброго времени суток. > В 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. Подозреваю, что я где-то > заблуждаюсь и потому у меня не работает - может кто-то подскажет в чем > моя ошибка? Заблуждаешься ты в основном в том, что ожидаешь от шеллов соблюдения стандартов. В команде zsh на этом изрядно заморочены, в команде dash - так себе, они скорее делают свой шелл таким, чтобы то, что он понимает, без сюрпризов работало в любом другом шелле, делающем вид, что он понимает язык /bin/sh. А bash гарантированно не соблюдает POSIX.