2013-06-03 33 views
11

Ký tự thoát (\) có thể được sử dụng để thoát khỏi dòng, ví dụ:Kết thúc dòng (dòng mới) thoát trong bash

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

tuy nhiên, không phải là dòng cuối cùng (dòng mới) được đại diện bởi \n có hai ký tự. không phải kết quả của việc thoát là chữ của \n. ví dụ.

%echo $'\\n' 
\n 
% 

Cảm ơn câu trả lời của bạn!

Chỉnh sửa: Rất tiếc, tôi không giải thích rõ điều này. Tôi không cố gắng lặp lại một dòng mới. Tôi tự hỏi tại sao \ có thể là ký tự dòng mới (\n) có hai ký tự thay vì chỉ thoát dấu gạch chéo ngược trong ký tự dòng mới và tạo chữ của \ n

+0

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

+8

Rất tiếc, tôi vẫn không chắc tôi hiểu câu hỏi của bạn. Có lẽ nó sẽ giúp để biết rằng '\ n' không phải là _really_ một ký tự dòng mới - nó là một chuỗi thoát _represents_ một dòng mới (mà chỉ là một ký tự trong Linux). '\' Ở cuối của một dòng thoát ký tự newline _actual_ mà bạn gõ vào bằng cách sử dụng phím 'enter'. –

+0

@MarkkuK, cảm ơn bạn! điều này thực sự trả lời câu hỏi của tôi. Tôi luôn nghĩ rằng '\ n' là ký tự dòng mới của nó. Đó là lý do tại sao tôi không hiểu tại sao một dấu gạch chéo ngược có thể thoát khỏi hai ký tự. Xin lỗi về cách nói xấu. – Yoland

Trả lời

16

Trên thực tế, \n không thực sự là một ký tự xuống dòng - đó là một dãy thoát mà đại diện một dòng mới (mà chỉ là một nhân vật trong Linux). \ ở cuối dòng thoát thực tế ký tự dòng mới mà bạn nhập bằng phím enter. Bạn có thể nhìn vào những gì giá trị ASCII đại diện cho nhân vật khác nhau sử dụng hexdump:

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

Bạn sẽ nhận thấy Echo in ra 3 nhân vật: \ (5c), n (6đ), và một dòng mới (0a). Bạn cũng sẽ nhận thấy rằng ở phía bên phải của đầu ra hexdump, dòng mới hiển thị dưới dạng ".", Bởi vì nó được coi là một non-printing character.

1

Dòng mới là tên được đưa ra trong thế giới UNIX một ký tự kết thúc một dòng trong một tệp định hướng dòng (hoặc trong một thiết bị đầu cuối). Trong thế giới UNIX/Linux, điều này tương ứng với ký tự lineline ASCII.

Các hệ thống khác nhau sử dụng các quy ước khác nhau cho các dòng kết thúc: Windows sử dụng một chuỗi trả về vận chuyển và dòng cấp dữ liệu, trong khi Mac ban đầu sử dụng một lần trả lại duy nhất. Sự nhầm lẫn này xuất phát từ thực tế rằng đây là những lệnh ban đầu cần thiết để di chuyển đầu in của máy in đến đầu dòng mới.

\n là cách thông thường để biểu thị ký tự cuối dòng trong mã, một lần nữa ban đầu trong thế giới UNIX, chính xác hơn trong ngôn ngữ C. Lưu ý rằng khi đọc một tệp văn bản C, hãy đọc một ký tự dòng mới ngay cả trên các hệ thống mà đây thực sự là một chuỗi gồm hai ký tự.

+0

Trong UNIX nếu một dòng mới là 2 ký tự, C (hoặc chính xác hơn fread) đọc 2 ký tự. Trên Windows, nếu một tệp được mở dưới dạng tệp văn bản, thư viện sẽ chuyển đổi chuỗi \ r \ n thành \ n. Nếu không, ngay cả trên Windows 2 ký tự sẽ được đọc. – martinkunev

+0

Trong UNIX newline là một ký tự theo định nghĩa và đó là lineline ASCII hoặc của nó trong các bộ ký tự khác. Đúng là các trình tự của dòng trả về dòng và vận chuyển được đọc là chúng không có bản dịch. –

Các vấn đề liên quan