LSB (Linux Standard Base) 是否需要行尾有 NEWLINE 字符?

LSB (Linux Standard Base) 是否需要行尾有 NEWLINE 字符?

POSIX 和 SUS(单一 UNIX 规范)都将一行定义为

<newline>零个或多个非字符加上终止字符的序列<newline>

许多发行版更倾向于 LSB 而不是 POSIX。 LSB 包含许多 POSIX/SUS 标准,但并非全部。

对于 LSB v4.1,行还必须以 NEWLINE 字符终止吗?

答案1

关于“范围”的章节

Linux Standard Base (LSB) 定义了编译应用程序的系统接口和支持安装脚本的最小环境。其目的是为符合 LSB 的大批量应用提供统一的行业标准环境。

[...]

LSB 主要是二进制接口定义。并非所有可供应用程序使用的源代码级 API 都包含在本规范中。

对于 LSB 未定义的事物,例如与标准实用程序的行为有关的大多数事物(某些扩展除外)和基本术语的定义,它指的是 POSIX 标准(这是一个规范的LSB 的参考,即 LSB 构建在 POSIX 之上)。

POSIX 标准告诉我们那一个线

<newline>零个或多个非字符加上终止字符的序列<newline>

这意味着一行文本必须以换行符终止,即使在符合 LSB 4.1 标准的系统上也是如此。

答案2

您似乎误解了此POSIX要求的后果。

不以换行符结尾的东西就不是行。

例如,wc如果文件根本不包含换行符,则报告 0 行,即使在 Linux 上也是如此。

您添加的新问题看起来与第一个问题有点不同,因为它询问特定的用例和由此产生的问题。

首先,以换行符结尾的较长文件会导致与 Linux 无关的其他问题。如果 C 包含文件不以换行符结尾,则如果 C 源代码中下一行的文本仅在开头处按预期工作,则这可能会导致 #includes 该文件的 C 源代码失败的一条线。

此外,有些程序会忽略文件中的最后一行(如果它不是由换行符终止)。

nul如果文件包含字节或不以换行符结尾,则 SCCSv4 和 SCCSv5 等软件会将文件分类为“二进制” 。这会导致增量处理不理想。

最后,LSB是 Linux 内部的二进制标准,但文件在不同平台之间复制,即使在这方面LSB有所不同POSIX,这也不会改变POSIX.

也许知道以前没有编辑器UNIX可以创建不以换行符结尾的文件会有所帮助。第一个可以创建此类文件的编辑器是Gosling EMACS1979 年的 from,随后是1980 年的VEDfrom UNOS(第一个 UNIX 克隆)。

因此,告诉您的用户避免此类文件似乎是一个很好的做法......

相关内容