先来用sublime打开一个文件:foo.txt,随便输入几行:
aaa
bbb
ccc
保存,它看起来是这样的:
我们写一个简单的脚本来把这个文件逐行地读出来:
while read line; do
echo "~~$line~~"
done < ~/foo.txt
你期待文件中的三行都被读出来,是吗?可是事实是这样的:
~~foo.txt~~
~~111~~
最后一行被天狗吃了?在zsh用cat能发现一些端倪:
注意这里的%
表示这一行是没有换行的。举个例子:
所以问题出在sublime的默认保存文件方式上:它并没有给最后一行加上换行符。这导致了刚才的foo.txt
的最后一行在while read
中并不被认为是一个合法的行。
这个链接解释了默认情况下,各个编辑器在保存时是否给最后一行加上换行符。
解决方式:在~/.config/sublime-text-3/Packages/User/Preferences.sublime-settings
中加入
"ensure_newline_at_eof_on_save": true