Я читал на этом посту: bash "for in" looping on null delimited string variable , чтобы узнать, смогу ли я обрабатывать произвольный текст, содержащий пробелы внутри массива.bash "read -a" looping on string string string
Основываясь на пост выше это работает отлично:
while IFS= read -r -d '' myvar; do echo $myvar; done < <(find . -type f -print0)
Чтобы проверить свое понимание я это сделал (который до сих пор работает отлично):
while IFS= read -r -d '' myvar; do echo $myvar; done < <(printf "%s\0" 'a b' 'c d')
Однако я попытка сохранения вывода в массиве он идет не так:
IFS= read -r -d '' -a myvar < <(printf "%s\0" 'a b' 'c d')
Массив содержит только a b
и не c d
:
echo ${myvar[@]}
a b
По-видимому, есть тонкие детали я здесь отсутствует. Спасибо за любую помощь.
PS. Я бегу:
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.
Из 'help read': * Прочитайте строку со стандартного ввода и разделите его на поля. * 'A b \ 0c d' больше, чем одна строка. – Cyrus
'read -a' предназначен для назначения слов в одной строке в массив. Чтобы прочитать строки с нулевым ограничением в массив: 'unset arr i; в то время как IFS = read -r -d '' 'arr [i ++]'; делать :; done <<(printf "% s \ 0" 'a b' 'c d') '. – 4ae1e1
И строка по определению заканчивается ascii 0, правильно? Например, Newline является только символом форматирования? –