linux文本每行末尾加自渎,文本每行都应该换行吗(cat输出文件时会在末尾自动加上换行吗)...

博客探讨了在UNIX环境中,文本文件每行末尾应当使用换行符的约定,这有助于命令行工具的协同工作。文章指出,编辑器如VIM/nano可能会自动在文件末尾添加换行符,而cat命令本身并不会。不遵循这一约定可能导致某些命令行工具出现问题。此外,还引用了C/C++标准,说明每行结束应使用换行符。最后,讨论了Windows与UNIX环境对此处理的不同,并强调了这一约定的重要性。
摘要由CSDN通过智能技术生成

问题起源

ArchStacker遇到一个很神奇的问题:cat输出文件时会在末尾自动加上换行吗?

在IRC上收到这条消息后,我自己测试了一下发现cat不会自动加换行。后面测试编辑器时发现是VIM/nano自动加上的换行。

虽然用VIM编辑的时候并不能看出末尾有一行空行。但是用hexdump命令以十六进制方式查看时,发现总是多出一个0x0a。于是误以为cat会给文件末尾加上换行。实际上是编辑器给自动加上的。

文本每行都应该换行

“根据2011年ISO发布的C语言标准C11(ISO/IEC 9899:2011)和C++标准C++11(ISO/IEC 14882:2011),每行末尾都应该换行。”

另外一致的行尾换行,有利于命令行工具的协同工作。

比如合并两个文本文档,简单地用cat file1 file2 > result即可。但这是因为每行都有换行结尾。否则还得想办法给两文档之间插入换行。

再如简单地给文本末尾加上一行,是简单的echo somethingnew >> file呢,还是echo -e '\n' >> file; echo somethingnew >> file 呢?

kandu@#ubuntu-cn曰: “因为unix并没有一个真实的 eof 字符存在。若一个处理文本流的daemon不断接受字符串。它是等到\n才进行处理。你若写个程序将一个未用\n结尾的文本全部喂给 daemon, daemon 没看到 \n 就不知道最后一行是已经结束了。unix 界有约定文本最后一行要\n。 ”

感觉在Windows GUI环境完全不用关心这些琐事。而严重依赖于文本的UNIX环境却对每行文本是否必须得有EOL结尾都斤斤计较。

第一次注意到“文本每行都应该换行”这个约定(convention)。

参考文献

Linux下vi编辑过的文件末尾都有换行符:换行符() 相当于ASCII 换行字符(十六进制0A) [

http://justwinit.cn/post/3516/ ]

文本每行都应该换行——vi文件末尾自动换行,不会导致php输出空行

[ http://www..com/sink_cup/archive/2012/08/17/vi_php_eol_tab_space.html

]

Why should files end with a newline? [

http://stackoverflow.com/questions/729692/why-should-files-end-with-a-newline ]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值