从前的从前,我一直以为回车即换行,换行即回车.
这个"以为"维持了二十余年
今天在了解这些转义符时,发现我的知识库又少了别人一截:
"回车"(carriage return)和"换行"(line feed)是两个不同的概念:
- 在很久很久以前,在计算机宝宝还没有出生之前,有一种叫做电传打字机(Teletype Model 33)的神器,每秒钟可以打 10 个字符。(嗯,好像很厉害的样子)
- BUT,神器也是有 bug 的(转折这么快??!)。就是在打完一行换行的时候,会需要0.2秒的反应时间,而恰是这 0.2 秒,可以打两个字符,对,就是两个字符。要是在这 0.2 秒里面,又有新的字符传过来,那么这个字符将丢失。(扔进咸水海的那种丢失)
- 所以,机智的研制人员想了个办法,就是在每行后面加两个表示结束的字符。一个叫做"回车",告诉打字机把打印头定位在左边界,即回到行首;另一个叫做"换行",告诉打字机把纸向下移一行。
- 所以这两个概念诞生了,它们是 different 的,睁大眼睛看看。
- 后来de后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,部分科学家认为在每行结尾加两个字符太浪费了,加一个就可以。
- 于是,在多年后的今天,在不同操作系统中,有不同的操作符
大佬们就不能和平统一一下吗??
所以,现在,在不同的操作系统中,文件的实际换行符如下:(你经常也看不见它们)
- linux,unix:
- windows:
- Mac OS:
单个拆开来讲,就是:
-
:
在 Windows 中,表示换行且回到下一行的最开始位置
在 Mac OS 中, 啊不,在 Mac OS 里,用 符 飞速到达下一行的行首
在 Linux、unix 中只表示换行,但不会回到下一行的开始位置(记住,人家用两个,豪气着呢) -
:
在 Linux、unix 中表示返回到当行的最开始位置,不会换行(记住,人家用两个,架势大)
在 Windows 中, 啊不,Windows 中,人家用 符,飞速到达下一行行首
在 Mac OS 中,表示换行且返回到下一行的最开始位置
一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;
而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
SO Easy, 话咁易。get 到一点了