При установке 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