2017-03-02 46 views
1

輸入文件:慶典而讀循環失敗作爲行終止

$ cat list 
dog \ 
cat \ 
apple \ 

腳本:

while read line;do echo $line;done < list; 

問題: 以上腳本打印什麼。而使用「讀取-r」代替讀取打印所有行。

我的問題是..

不應該while循環運行在上述情況下(沒有-r)至少一次,並打印輸出的第一行?爲什麼條件檢查在第一行本身上失敗?

+1

檢查輸出代碼。您可以自己運行'read <<<'以\''結尾的東西,然後執行'echo $?'。我懷疑,允許\轉義最後一個換行符會使'read'退出一個錯誤,因爲它在碰到EOF時需要更多的輸入。另外,請嘗試刪除文件中的最後一個反斜槓,看看會發生什麼。 –

回答

4

由於所有換行符都被轉義,並且read會讀取到未轉義的換行符,所以它會到達文件結尾而沒有找到一個換行符。而且,作爲help read說:

Exit Status: 
The return code is zero, unless end-of-file is encountered, read times out 
(in which case it's greater than 128), a variable assignment error occurs, 
or an invalid file descriptor is supplied as the argument to -u.

注意line仍包含行讀至今:

$ while read line; do echo "$line"; done < foo; echo $line 
dog cat apple 
+1

很高興看到我剛剛編造的愚蠢理論是正確的:) –

+2

瘋狂物理學家很少有錯誤。 :d – muru