行尾(新行)以bash格式转义

时间:2013-06-03 19:09:10

标签: linux bash shell

转义字符(\)可用于转义行尾,例如

% echo This could be \
a very \
long line\!
This could be a very long line!
%
然而,

不是由\n表示的行尾(换行符),它有两个字符。转义的结果不应该是 \n 的字面值。 e.g。

%echo $'\\n'
\n
%

感谢您的回答!

编辑: 对不起,我的解释不够好。我不是想回应一条新线。我想知道为什么\能够使用具有两个字符的新行字符(\n)而不是仅仅转义新行字符中的反斜杠并生成\ n

的字面值

2 个答案:

答案 0 :(得分:16)

实际上,\n并非真正换行符 - 它是表示换行符的转义序列(在Linux中只是一个字符) 。一行末尾的\转义使用回车键输入的实际换行符。您可以使用hexdump查看ASCII值代表不同的字符:

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

您会注意到echo打印出3个字符:\(5c),n(6e)和换行符(0a)。您还会注意到,在hexdump输出的右侧,换行符显示为“。”,因为它被视为non-printing character

答案 1 :(得分:1)

Newline是UNIX世界中给出的一个字符的名称,该字符在面向行的文件(或终端)中结束一行。在UNIX / Linux世界中,这对应于ASCII换行符。

不同的系统对结束行使用不同的约定:Windows使用一系列回车符和换行符,而Mac最初使用单回车符。这种混淆源于这样的事实,即这些原本是将打印机的打印头移动到新行开头所需的命令。

\n是一种在代码中表达行尾字符的传统方式,最初在UNIX世界中,更确切地说是在C语言中。请注意,在读取文本文件时,即使在实际上是两个字符序列的系统上,C也会读取单个换行符。