2013-06-03 3 views
11

Эквивалентный символ (\) может использоваться для выхода из конца строки, например.Конец строки (новая строка) escapes в bash

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

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

%echo $'\\n' 
\n 
% 

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

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

+0

http://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting –

+8

Хм, все еще не уверен, что я понимаю ваш вопрос. Возможно, это поможет узнать, что '\ n' не _really_ символ новой строки - это escape-последовательность, которая _represents_-новая строка (это всего лишь один символ в Linux). '' 'В конце строки выходит за символ _actual_ newline, который вы вводите с помощью клавиши« enter ». –

+0

@MarkkuK, спасибо! это действительно отвечает на мой вопрос. Я всегда думал, что '\ n' - это новый символ линии. Вот почему я не понимаю, почему обратная косая черта может скрыть два символа. Извините за плохую формулировку. – Yoland

ответ

16

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

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

Вы заметите, что эхо распечатаны 3-х символов: \ (5с), n (6е) и перевода строки (0A). Вы также заметите, что с правой стороны выхода hexdump символ новой строки отображается как «.», Так как считается non-printing character.

1

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

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

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

+0

В UNIX, если строка новой строки - 2 символа, C (или более точно) читает 2 символа. В Windows, если файл открыт как текстовый файл, библиотека преобразует последовательность \ r \ n в \ n. В противном случае даже на Windows 2 будут прочитаны символы. – martinkunev

+0

В новой строке UNIX есть один символ по определению, и это строка ASCII или его корреспондент в других наборах символов. Верно, что последовательности перевода строки и возврата каретки читаются так, как они есть, без перевода. –