[2019.03.21]LF, CR, CRLF and LFCR(?)
开玩笑的啦,没有LFCR这种沙雕东西
为什么突然想起来写这个呢,是因为先前照着shell画llehs的时候,总报错,改正了以后又因为看不见而在上一篇博客上没有写明,所以过来好好写一写咯。

可以看出报错里面出了各种稀奇古怪的东东:无法识别#!bin/sh以及觉得每一行代码后面都多了\r
故事开始于上古时期,那个时期的人们还在用打字机帮助自己不用笔。最早的时候打字机是纯机械不用电的,按下Enter是没有办法让光标挪动到下一行的(事实上那个时候既没有Enter也没有光标啦),需要人们拉一下手柄让传动装置把纸张往上面挪一下,然后戳一个释放按钮把打字头弹回纸张最左边。这两个操作被翻译作换行(LineFeed, LF)和回车(Carriage Return, CR)。
当今世界的QWERTY键盘则是由后来大型机、小型机出现以后兴起的电传打字机(Teletype, TTY)继承而来,此时,ENTER、Ctrl之类的现代案件才被加上去。
这就引出了今天我们的主角:LF和CR。虽然现在的电脑已经不用喂纸就能输入输出,可是这两个很久以前就定义,并被写进了ASCII编码表的功能字符还是被继承了下来,最直观的体现就是我们在Word里面看到的小小的箭头符号

Word很形象地告诉了我们什么是换行什么是换行回车,虽然本质上没啥区别
说了这么多看似无关的历史话题,你可能会问,为什么他会影响到我们的脚本呢?原因在这里:在Microsoft家族中,无论是CMD、POWERSHELL还是其他东东,他们都使用LFCR(\n\r)来当作“该使用下一行”的识别依据;然而,Linux之类的Unix、类Unix系统则使用LF(\n)当作本行结束,而把CR当作执行命令的标志(如果在shell里面);MAC OSX则使用CR当作本行结束。在文本文档里倒无所谓(最多就是排版混乱),可是在代码里,这小小的换行符就变成编译器不认识的怪东西了。上面图片中的^M 和\r都是 CR 先生的杰作。
这个故事告诉我们一个道理,如果你是跨平台开发者,一定要用一个能简便更换换行符的开发工具!而且一些奇奇怪怪的问题,很有可能是因为换行符这样的小细节导致的!

VS Code 里面虽然很不起眼,但是很重要的小功能
[2019.03.21]LF, CR, CRLF and LFCR(?)的更多相关文章
- 2019.03.21 admin
1.新建文件创建一个应用类 stu Python manage.py startapp stu 2,创建应用类 记得在setting中的installed_apps中添加应用 student/mode ...
- 2019.03.21 读书笔记 ==与Equals
首先得出一个结论:==是比较变量内存的数据,Equals是值比较.但是他们都能被重写,所以object又增加了一个RefrenceEquals不可被重写,只比较数据: [ReliabilityCont ...
- 2019.03.21 读书笔记 枚举ENUM
其实没必要为枚举显式赋值,如果赋值了,就一定要全部赋值,否则默认在上一个元素的基础上+1,如果不给枚举变量赋值,就算枚举中没有0元素,也会显示为0,而超出枚举范围的整型数据,也会显示值本身,而不是异常 ...
- 2019.03.21 读书笔记 readonly与const
区别: const是编译时常量(指反编译时看到的源码是常量本身,而不是变量),自带static,只能修饰基元类型.枚举.字符串,readonly是运行时常量(全局变量或者构造赋值),不受类型限制,但在 ...
- 2019.03.21 读书笔记 基元类型的Parse与TryParse 性能与建议
Parse转换失败时会抛出异常,耗损性能,如果转换成功,则与TryParse无差异.查看源码,tryparse的代码更多一些,在失败时,反而性能更优,主要是抛出异常耗损了性能.所以在不确定是用Tryp ...
- git 换行符LF与CRLF转换问题
git 换行符LF与CRLF转换问题 一.背景 在各操作系统下,文本文件所使用的换行符是不一样的.UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),后来 ...
- 2019.3.18考试&2019.3.19考试&2019.3.21考试
2019.3.18 C O D E T1 树上直接贪心,环上for一遍贪心 哇说的简单,码了将近一下午终于码出来了 感觉自己码力/写题策略太糟糕了,先是搞了一个细节太多的写法最后不得不弃疗了,然后第二 ...
- git 中关于LF 和 CRLF 的问题
git 中关于LF 和 CRLF 的转换问题注意: Windows下编辑器设置中,建议调整设置为Unix风格.(具体设置位置各种编辑器上不同,需要找找) 使用Git Bash进行命令行操作时,运行一下 ...
- http://www.cnblogs.com/wzh206/archive/2010/03/21/1691112.html
http://www.cnblogs.com/wzh206/archive/2010/03/21/1691112.html
随机推荐
- Elasticsearch简介与实战
什么是Elasticsearch? Elasticsearch是一个开源的分布式.RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene. Lucene 可以说是 ...
- DSAPI 截取被遮挡的窗口图像
Me.BackgroundImage=DSAPI.控件.截取窗体或控件图像(目标窗口句柄) 支持截取被覆盖或隐藏的窗口.
- .NET ORM框架 SqlSugar4.0 功能快速预览【开源】
SqlSugar 4.0 ORM框架的优势 为了未来能够更好的支持多库分布式的存储,并行计算等功能,将SqlSugar3.x全部重写,现有的架构可以轻松扩展多库. 源码下载: https://gith ...
- 前端_Bootstrap简单使用
首先说一下简单使用方法: 1.首先上官网下载Bootstrap(就是一些js文件和一些css文件) ,网址: https://v3.bootcss.com/getting-started/#downl ...
- Java笔记(day7-day8)
this关键字: (1)this(当局部变量和成员变量重名时,可以用关键字this区分) this代表对象,当前对象 this就是所在函数所属对象的引用 简单来说,哪个对象 ...
- java 深克隆(深拷贝)与浅克隆(拷贝)详解
java深克隆和浅克隆 基本概念 浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所拷贝的对象,而不复制它所引用的对 ...
- Java 处理 multipart/mixed 请求
一.multipart/mixed 请求 multipart/mixed 和 multipart/form-date 都是多文件上传的格式.区别在于,multipart/form-data 是一种 ...
- javascript中Date常用方法
一.Date的构造函数 有四种形式的Date构造函数: //1.构造函数没有参数,则返回当前日期的Date对象 var now=new Date(); //2.构造函数的参数为日期的毫秒数,返回距离1 ...
- glibc溢出提权CVE-2018-1000001总结
遇到了好几个centos6.5,一直尝试想提权.暂未成功,靶机内核:2.6.32-696.18.7.el6.x86_64. glibc版本:ldd (GNU libc) 2.12 目前编译过程中都发现 ...
- 可以让你神操作的手机APP推荐 个个都是爆款系列
手机在我们的生活中显得日益重要,根据手机依赖度调查显示,69%的人出门时必带手机,20%的人经常在吃饭睡觉.上卫生间时使用手机:43%的人早上起床第一件事就是查看手机,不用多说,我们对于手机的依赖性越 ...