Подтвердить что ты не робот

Чтение строк с нулевым ограничением через цикл 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
4b9b3361

Ответ 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)