Newline at end of text file

在處裡文字檔案的時候原本以為抓行數要抓’\n’和’0’,然後就大撞牆了。

先來測試一下吧,用vim產生個內容是aaa的文字檔案。

$ vim test
aaa
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"test" 1L, 4C                                            1,1          全部

產生出來的檔案我們用cat看看

$ cat test
aaa
$

看起來很正常,我們改用hexdump看看

$ hexdump t
0000000 6161 0a61
0000004
$

檔案結尾是0x0a(^M)換行字元OAO
那如果結尾不是換行字元的話呢?

$ echo -n 'aaa' > test2
$ hexdump test2
0000000 6161 0061
0000003
$ cat test2
aaa$

prompt接到輸出後面了
查了資料過後發現在POSIX中Line是這樣定義的

3.206 Line

A sequence of zero or more non- characters plus a terminating character.

來源: Definitions

而終端機中的程式也是按照這個標準設計的,所以如果文字檔案不符合標準的時候顯示就有可能爛掉。
處裡字串的時候要記得處理最後這個換行,原本以為換行只會被^M雷到而已xDDD


Reference:

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