Конец строки (новая строка) выходит в bash

Символ Escape (\) может использоваться для выхода из конца строки, например

% echo This could be \
a very \
long line\!
This could be a very long line!
%

однако, это не конец строки (новая строка), представленный \n который имеет два символа. не должен быть результатом escape-выражения буквалом \n. например

%echo $'\\n'
\n
%

Спасибо за ваш ответ!

Изменение: Извините, я не объяснил это достаточно хорошо. Я не пытаюсь повторить новую строку. Я задаюсь вопросом, почему \ может использовать новый символ линии (\n), который имеет два символа вместо того, чтобы просто сбрасывать обратную косую черту в новом символе линии и создавать литерал \n

Ответ 1

На самом деле, \n не является символом новой строки - это escape-последовательность, которая представляет новую строку (это всего лишь один символ в Linux). В конце строки \ в конце строки выводится символ новой строки, который вы вводите с помощью клавиши ввода. Вы можете посмотреть, какие значения ASCII представляют разные символы, используя hexdump:

%echo $'\\n'
\n
%echo $'\\n' | hexdump -C
00000000  5c 6e 0a                   |\n.|
00000003

Вы заметите, что эхо напечатало 3 символа: \ (5c), n (6e) и новую строку (0a). Вы также заметите, что с правой стороны выхода hexdump символ новой строки отображается как ".", Так как считается непечатаемым символом.

Ответ 2

Newline - это имя, указанное в мире UNIX, символу, который заканчивает строку в линейно ориентированном файле (или в терминале). В мире UNIX/Linux это соответствует символу перевода строки ASCII.

Различные системы используют разные соглашения для завершения строк: Windows использует последовательность возврата каретки и фида строки, в то время как Mac первоначально использовал один возврат каретки. Эта путаница проистекает из того факта, что изначально это были команды, необходимые для перемещения печатающей головки принтера в начало новой строки.

\n - это обычный способ выражения символа конца строки в коде, снова изначально в мире UNIX, точнее на языке C. Обратите внимание, что при чтении текстового файла C считывает один символ новой строки даже в системах, где это действительно двухсимвольная последовательность.