最近收到一個 pull request 幫忙補了幾個檔案的 EOF.
Github 網頁 diff 看不出來改了哪, 把 commit 拉下來後才看到多補了一個 newline
character (\n
).
想說之前沒加 \n
也活得好好的, 所以好奇 Google 了一下差在哪.
依照 POSIX 標準的定義, line 是 A sequence of zero or more non- <newline> characters plus a terminating <newline> character.
也就是說每一行的結尾都應該要有 \n
, 才能視為完整的一行.
如果在檔案最後一行沒有 \n
, 在某些情況下可能會有顯示問題.
比方說用 cat
看檔案時, 因為少了 \n
, 下一行命令輸入會 prompt 在檔案內容的結尾, 而不是新的一行.
borting@borting:~$ cat test.txt
123 borting@borting:~$
缺少 \n
更麻煩的情況有可能造成 parsing 錯誤, 所以像在 ISO C89 就有規定檔案結尾一定要是 \n
, 否則 gcc 會報 warning.
對 Windows 系統來說, 檔案就不要求一定要以 \n
結尾.
所以 nctu-thesis
(https://github.com/borting/nctu-thesis) 有些檔案少了 \n
結尾, 可能是那些檔案最初是在 Windows 下寫的關係.
這一篇也比較不同 Editor 對檔案結尾的 \n
顯示的差異.
看起來只有 vim
和 nano
這兩個純血 UNIX Editor 不會多顯示一行, 其他 Editor 都會因為檔案結尾的 \n
而多顯示一行空白行在結尾.
Linux
Written on
February
27th,
2021
by
Borting