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

Мне любопытно, почему требуется backspace при установке IFS для разделения на новые строки следующим образом:

IFS=$(echo -en "\n\b")

Почему я не могу просто использовать это (которое не работает)?

IFS=$(echo -en "\n")

Я нахожусь в системе Linux, которая сохраняет файлы с окончанием строки Unix. Я преобразовал свой файл с символами новой строки в шестнадцатеричный, и он определенно использует только "0a" в качестве символа новой строки.

У меня много googled, и хотя многие страницы документируют новую строку с последующим обратным решением, ни один из них, который я нашел, не объясняет, почему требуется backspace.

-Давид.

Ответ 1

Поскольку в руководстве bash говорится о подстановка команды:

Bash выполняет расширение, выполняя команду и заменяя подстановку команд стандартным выходом команды, с удалением любых завершающих строк.

Итак, добавив \b, вы предотвратите удаление \n.

Более чистый способ сделать это может заключаться в использовании $'' цитирования, например:

IFS=$'\n'

Ответ 2

Я просто вспомнил самый простой способ. Протестировано с помощью bash на debian wheezy.

IFS="
"

не шутите:)

Ответ 3

Это взломать из-за использования echo и подстановки команд.

prompt> x=$(echo -en "\n")
prompt> echo ${#x}
0
prompt> x=$(echo -en "\n\b")
prompt> echo ${#x}
2

Линии $(), завершающие символы новой строки и \b, не позволяют \n быть конечной новой строкой, а в любом тексте маловероятно. IFS=$'\n' - лучший способ установить IFS для разделения на строки новой строки.

Ответ 4

Просто нажатие на ввод без задания чего-либо также работает. Хотя, похоже, кто-то ошибся и его трудно понять.

IFS=
#This is a line