Чтение строк с нулевым ограничением через цикл Bash
Я хочу перебирать список файлов, не заботясь о том, какие символы могут содержать имена файлов, поэтому я использую список, ограниченный нулевыми символами. Код лучше объяснит ситуацию.
# Set IFS to the null character to hopefully change the for..in
# delimiter from the space character (sadly does not appear to work).
IFS=$'\0'
# Get null delimited list of files
filelist="`find /some/path -type f -print0`"
# Iterate through list of files
for file in $filelist ; do
# Arbitrary operations on $file here
done
Следующий код работает при чтении из файла, но мне нужно прочитать переменную, содержащую текст.
while read -d $'\0' line ; do
# Code here
done < /path/to/inputfile
Ответы
Ответ 1
В bash вы можете использовать следующую строку
while IFS= read -r -d '' line ; do
# Code here
done <<<"$var"
Обратите внимание, что вы должны включить IFS=
и просто использовать -d ''
, но убедитесь, что между "d" и первой одиночной кавычкой есть пробел. Кроме того, добавьте флаг -r
, чтобы игнорировать экраны.
Кроме того, это не является частью вашего вопроса, но я могу предложить лучший способ сделать ваш script при использовании find
; он использует замещение процесса.
while IFS= read -r -d '' file; do
# Arbitrary operations on "$file" here
done < <(find /some/path -type f -print0)