[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
随机推荐
- Springboot 系列(七)Spring Boot web 开发之异常错误处理机制剖析
前言 相信大家在刚开始体验 Springboot 的时候一定会经常碰到这个页面,也就是访问一个不存在的页面的默认返回页面. 如果是其他客户端请求,如接口测试工具,会默认返回JSON数据. { &quo ...
- Java虚拟机垃圾收集算法
1.标记-清除算法 标记-清除算法分为 "标记" 和 "清除" 两个步骤:首先标记出所有需要回收的对象,然后在标记完成后统一回收所有被标记的对象,是垃圾收集算法 ...
- oracle学习笔记(六) JDBC使用
JDBC使用 1. 导包 直接使用IDEA导入依赖包即可 新建一个lib,把jar包放在这里 2. 加载驱动 Class.forName("oracle.jdbc.driver.Oracle ...
- javaweb中上传视频,并且播放,用上传视频信息为例
1.上传视频信息的jsp页面uploadVideo.jsp <body background="image/bk_hero.jpg"><div id=" ...
- Gulp 前端优化
使用方法: 下载 node.js , https://nodejs.org/en/,并安装 msi 一下命令都属于 dos 命令 node -v,npm -v,检验是否下载成功(出现版本号) 将 np ...
- 开源GIS知识
---恢复内容开始--- 2.1.3组件层 数据库组件层按照功能可分为两类:数据管理组件和分析组件. 2.1.3.1数据管理组件 (1)GDAL GDAL(http://www.gdal.org/)是 ...
- SSH实现登陆拦截器
/** * 登录验证拦截器 * */ @SuppressWarnings("serial") public class LoginInteceptor implements Int ...
- API测试工具SoapUI & Postman对比分析
本文由葡萄城技术团队于博客园原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 最近公司要引入API测试工具,经过调查和了解,最终决定在SoapUI ...
- 自动化测试 Appium之Python运行环境搭建 Part1
Appium之Python运行环境搭建 Part1 by:授客 QQ:1033553122 实践环境 Win7 Python 3.4.0 JAVA JDK 1.8.0_121 node.js8.11. ...
- <自动化测试方案_9>第九章、持续集成平台搭建
第九章.持续集成平台搭建 (一)什么是持续集成 参考文章地址:https://blog.csdn.net/qq_32261399/article/details/76651376 敏捷软件开发(英语: ...