Re: Null в качестве разделителя в скрипте
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.
Reply to: