[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Null в качестве разделителя в скрипте



Доброго времени суток.

В 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. Подозреваю, что я где-то
заблуждаюсь и потому у меня не работает - может кто-то подскажет в чем
моя ошибка?

-- 
WBR, Andrey Tataranovich


Reply to: