shell - temp IFS только как перевод строки. Почему это не работает: IFS = $ (echo -e '\ n')

я пытаюсь использоватьfor в оболочке для перебора имен файлов с пробелами. Я читаю вstackoverflow вопрос IFS=$'\n' может быть использован, и это, кажется, работает нормально. Я тогда читаюв комментарии к одному из ответов чтобы сделать его совместимым с posix для других оболочек, кроме bash, которые можно использовать.IFS=$(echo -e '\n')

Первый работает, а второй нетт. За комментарий проголосовали несколько раз. Я проверил вывод и переменная неКажется, он содержит новую строку.

#!/bin/sh

IFS=$(echo -e '\n')
echo -n "$IFS" | od -t x1
for file in `printf 'one\ntwo two\nthree'`; do
    echo "Found $file"
done

echo

IFS=



Выходные данные показывают, что разделитель полей отсутствует для первого:

0000000
Found one
two two
three



Но уместно на втором:

0000000 0a
0000001
Found one
Found two two
Found three



Я нашел ответ на вопрос, который может или не может быть дубликатом моего вопроса:

Linux - при настройке IFS для разделения на новые строки, почему необходимо включить возврат? - Переполнение стека

Есть ли опасность делать что?обсуждали там,IFS=$(echo -en '\n\b')? Потому что это добавляет\b на IFS (я проверял). Может\b встречаться в имени файла? Я неЯ не хочу, чтобы мой код разделил имя файла по ошибке.

Также есть ли у вас какие-либо рекомендации о том, как правильно обращаться с восстановлением IFS послеfor цикл? Должен ли я хранить его во временной переменной или запустить IFS и оператор for в подоболочке? (и как это сделать?) Спасибо

\n' echo -n "$IFS" | od -t x1 for file in `printf 'one\ntwo two\nthree'`; do echo "Found $file" done



Выходные данные показывают, что разделитель полей отсутствует для первого:

0000000
Found one
two two
three



Но уместно на втором:

0000000 0a
0000001
Found one
Found two two
Found three



Я нашел ответ на вопрос, который может или не может быть дубликатом моего вопроса:

Linux - при настройке IFS для разделения на новые строки, почему необходимо включить возврат? - Переполнение стека

Есть ли опасность делать что?обсуждали там,IFS=$(echo -en '\n\b')? Потому что это добавляет\b на IFS (я проверял). Может\b встречаться в имени файла? Я неЯ не хочу, чтобы мой код разделил имя файла по ошибке.

Также есть ли у вас какие-либо рекомендации о том, как правильно обращаться с восстановлением IFS послеfor цикл? Должен ли я хранить его во временной переменной или запустить IFS и оператор for в подоболочке? (и как это сделать?) Спасибо

Ответы на вопрос(2)

Ваш ответ на вопрос