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

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

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

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

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

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

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

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

-Давид.

4b9b3361

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