A=B\
C
означает «A равно строке B, за которой следует игнорирование новой строки, за которой следует C»
В том, что вы напечатали, нет CR, если оболочка его видит. Конец строки в Linux/Unix - это перевод строки (LF), а не CR. CR испускается как часть обработки терминала. Большинству терминалов требуется перевод строки для удаления строки и возврат каретки для отправки курсора назад влево. CR вставляется ядром при отправке перевода строки на терминал, когда терминалу это необходимо - IOW, он не виден оболочке. Обратите внимание, что, например, визуальный редактор может разделять использование CR и LF - наименьшее количество символов для следующего перезаписываемого участка экрана вполне может включать LF (чтобы перейти вниз по странице без изменения столбца).
Немного более запутанно, есть также перевод ввода для клавиатур. Клавиша Enter обычно отправляет возврат каретки (Control-M). Но чтобы распознать введенную команду, оболочка должна увидеть конец строки. Поэтому дополнительный параметр stty
описывает для обработки терминала ядра, что входной CR должен быть переведен в конец строки. Таким образом, оболочка все еще не видит CR.
Конечным результатом является то, что терминал отправляет:
A=B\<CR>C<CR>
Оболочка получает:
A=B\<LF>C<LF>
Оболочка анализирует это как "о, перевод строки с обратной косой черты - я просто игнорирую это" и в результате получается:
A=BC<LF>
И на выходе ядро изменяет последовательность, отправляемую терминалу во время ввода команды:
A=B\<CR><LF>C<CR><LF>
Ядро обработки терминалов управляется командой оболочки stty
и, в зависимости от реализации (Linux, Mac OS X, * BSD), базовые детали должны находиться под man termios
, man tty_ioctl
. man console_ioctl
и т. д.