8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
换行符在不同操作系统下有不同的表示,比如windows下是CR+LF连续两个字符,linux下为了节省空间用LF表示,macOS X下同样是LF(早期的macOS曾经使用CR)。关于CR和LF的历史要追溯到电传打字机时代,CR代表carriage return, 让打字机机头移动到当前行开始;LF代表line feed,让纸张往前移动一行。具体可以参考博客Why is the line terminator CR+LF?
之所以写这篇文章,是因为我在Linux下用python脚本按约定格式生成的文件被同事在Windows下打开发现行数不一致。
这里的关键在于“行”到底如何定义,看下POSIX规范:
3.206 Line
*A sequence of zero or more non- characters plus a terminating character.*
3.195 Incomplete Line
*A sequence of one or more non- characters at the end of the file.*
注意到文本末尾一个不以换行符结尾的字符串是不能算作标准的一行的。Linux下的很多常见命令行工具的正确执行都依赖这个定义,无论是cat、sed还是wc。以wc工具为例,可以看到如果字符串不以换行结尾,行数统计是不能得到与经验一致的结果的。
# line count: 0
echo -en 'abc' | wc -l
# line count: 1
echo -en 'abcn' | wc -l
如果在Linux下打开vi来编辑文件,默认配置情况下vi会自动添加一个换行符,所以通过ls命令观察写入的文件可以发现其大小比手动写入的字节数多出一个字节。
为了最大程度与Linux上其它的工具兼容,用程序生成文件时请记得给文件末尾加上换行符。