Происхождение асимметрии восходит к истории компьютеров.
Укороченная версия:
<CR> & <LF> (Carriage-Return and Linefeed)
==
\r & \n
Длинная версия:
первые экраны были в основном цифровыми версиями телетайпа (TTY) и использовали управляющие коды для генерации поведения, аналогичного принтерам. Возврат каретки переместил курсор (или печатающую головку) в начальный столбец. Перевод строки переместился на следующий ряд (на экране) и подал бумагу вперед на одну строку.
Для принтеров вы должны были сделать сопряжение, <CR><LF>иначе ваш вывод не будет выглядеть правильно. На ранних экранах проблема все еще сохранялась.
DOS (и sorta-Windows после) следуют старому стандарту и сохраняют текст с помощью <CRLF>.
* Текст NIX (как большинство пользователей vi знакомы) использует только <LF>для эффективности.
Для тестирования в Windows используйте Word / Wordpad и сохраните несколько строк текста «как тип: Текст - формат MS-DOS». Затем откройте тот же файл в блокноте. Это должно выглядеть нормально. Затем сохраните тот же файл в Word / Wordpad «как type: Text». Блокнот будет игнорировать все новые строки и запускать строки вместе. [Формат текста блокнота по умолчанию соответствует \r\nкомбинации, в то время как Word / Wordpad по умолчанию равен \n.]
\ r является кодовым эквивалентом <CR>
\ n - это эквивалент кода <LF>
И по моему (очень ограниченному) опыту работы с vi, он попытался бы «исправить» <CRLF>комбинацию из моего текстового редактора DOS. В итоге vi удалил один символ и заменил на <NUL>. Большая часть причины, по которой я перестал использовать vi.
\rесть<CR>и\nесть<LF>. Это не относится к актуальному вопросу о том, почему\n\rведут себя по- разному в разных контекстах.