2011-12-22 40 views
3

在bash,這個工程:尾隨換行和bash的「讀」內置

echo -n $'a\nb\nc\n' | while read x; do echo = $x =; done 

的同時,通過三次

= a = 
= b = 
= c = 

但可以想象,沒有傳統的文本文件循環尾隨換行符。我認爲read應該仍然適用於所有三條線路,但它不適用。我剛剛得到:

echo -n $'a\nb\nc' | while read x; do echo = $x =; done 

= a = 
= b = 

bash中的help read並沒有真正說明。

注:我不需要這個解決,我可以看到一些方法來解決它自己。我很好奇,而且我很想提交一份錯誤報告 - 我通常會盡量尊重那些可能沒有最後一行的文件。我在使用-d選項閱讀時遇到了這個問題。 read -d " "將在空格而不是換行符上分割,但它將在最後一個條目上錯過,除非它有尾部空格。

(Ubuntu的GNU的bash,版本4.1.5(1)-release)

+0

它的價值,你的第二個腳本作爲第一個與ksh。祝你好運。 – shellter 2011-12-22 22:06:25

回答

1
$ man bash 
    read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] 
      One line is read from the standard input, ... 

我認爲關鍵是:How to define "One line"
是否text without a '\n' at the end使One line
我猜read不這麼認爲。

+1

我的文本編輯器認爲這是一條線,我認爲每個文本編輯器都會。所以如果文本編輯器可以合理處理沒有換行符的文件作爲它們的最後一個字符,那麼我認爲'read'應該也是:-) – 2011-12-22 12:45:03