Re: Null в качестве разделителя в скрипте
> В shell скрипте обрабатывается список в котором в качестве разделителя
> используется нулевой символ '\0'. Вроде совместимо с POSIX, но нужное
> поведение есть только в zsh. В bash и dash ведет себя неправильно.
>
> IFS=$(printf '\0')
> for i in $(seq 1 10 | tr '\n' '\0')
> do
> echo "i = $i"
> done
> Пробовал различные варианты задания IFS: IFS=; IFS=''; IFS=$'\0';
> IFS=$(echo -en "\0") и т.д., но это не решает проблему.
>
> Как обойти проблему с помощью того же xargs или while/read я знаю. Меня
> интересует почему не работает вариант с for.
Вы знаете, как *решить* проблему с помощью ‘while read’. Для тех, кто не знает, сообщаю:
,----
| $ while read -r -d ''; do
| > printf 'i = %s\n' "$REPLY"
| > done < \
| > <(seq 1 10 | tr ' ' '\0')
| i = 1
| i = 2
| i = 3
| i = 4
| i = 5
| i = 6
| i = 7
| i = 8
| i = 9
| i = 10
`----
*Обойти* корректное решение с помощью словоделения в данном случае, слава богу, невозможно.
> Подозреваю, что я где-то заблуждаюсь и потому у меня не работает -
> может кто-то подскажет в чем моя ошибка?
Вы пытаетесь злоупотребить механизмом словоделения для реализации построчного чтения. По версии Грега Вулиджа это ошибка № 1 программировании на ГНУ Баше и сходных с ним языках. Ваше повезло, что вы натолкнулсь на ошибку так рано.
Reply to: