WSL使用LF行结束符还是CRLF行结束符?

9

Unix 使用 LF 行尾符。Windows 使用 CRLF 行尾符。那么 WSL 呢?


1
WSL是Linux(不是Unix),或者说,它托管实际的Linux发行版。当您安装Ubuntu时,您安装并运行的是Ubuntu,而不是类似于Ubuntu的东西。 - Panagiotis Kanavos
你为什么要问呢?你只需要检查一个文本文件就可以自己回答这个问题了。你是遇到了一些问题并假设WSL使用CR+LF吗? - Panagiotis Kanavos
1个回答

8
这个问题实际上没有一个确定的答案,因为操作系统不使用行结尾,而是由应用程序使用行结尾。大多数操作系统 API 将文件内容提供给应用程序作为连续的字节流,而不是一组行,所以应用程序需要根据其算法读写行结尾。
在 Windows 上(包括 MS-DOS 之前),规定应用程序使用 CR LF 对来表示行结尾,而在 Unix(以及类似的 Linux 系统)上,规定应用程序只使用 LF。
现代应用程序通常可以读写任意格式 - 包括 Windows 上最新版本的记事本 - 但可能会根据这些历史约定选择默认格式。
由于在 WSL 下运行的应用程序与在真实的 Linux 系统下运行的应用程序相同,它们可能会默认使用 LF。

1
即使是内核(可能是可以称为“操作系统”的最小部分)也使用LF。例如,用于表示可读数据的/proc文件系统中的文件。同样,处理Hash-bang行的binfmt模块将读取直到第一个LF。因此,尽管它通常只是惯例,但有时它不仅仅是惯例,即使只是惯例,也会被严格遵循。因此,在我看来,“Unix使用LF”这个快捷方式足以接受,接近真相。 - Joachim Sauer
2
@JoachimSauer 这些都是很好的例子,但我仍然认为这种简写方式会导致误解,因为它会引发像这样混淆的问题。在WSL系统上,OP要去浏览/proc的机会微乎其微;更有可能的是他们会用nano或vim编辑某些内容,并使用PHP或Python运行它。即使它们被配置为默认使用LF,这些工具也可以很好地处理CR LF。 - IMSoP
操作系统确实有行尾约定。例如,当Linux使用行尾符写入/proc文件时,在行末会发出“\n”。内置的Windows方法通常在“\n”之前发出/期望/处理\r,以理解行尾的概念。 - kfsone
之后,应用程序需要遵循本地约定,通常由内核设施或标准运行时库(libc、stdc++等)来实现。应用程序可以违反换行约定,因为它们只是约定,但这是一个错误,而不是一个特性。这就是为什么C++ iostreams有std::endl的原因。 - kfsone
@kfsone 我已经在两年前回复了有关/proc的评论,并且我仍然坚持那个评论;而且我的答案已经说过操作系统有惯例;所以我不确定你想要表达什么新观点。 - IMSoP
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接