輸入文件:慶典而讀循環失敗作爲行終止
$ cat list
dog \
cat \
apple \
腳本:
while read line;do echo $line;done < list;
問題: 以上腳本打印什麼。而使用「讀取-r」代替讀取打印所有行。
我的問題是..
不應該while循環運行在上述情況下(沒有-r)至少一次,並打印輸出的第一行?爲什麼條件檢查在第一行本身上失敗?
輸入文件:慶典而讀循環失敗作爲行終止
$ cat list
dog \
cat \
apple \
腳本:
while read line;do echo $line;done < list;
問題: 以上腳本打印什麼。而使用「讀取-r」代替讀取打印所有行。
我的問題是..
不應該while循環運行在上述情況下(沒有-r)至少一次,並打印輸出的第一行?爲什麼條件檢查在第一行本身上失敗?
由於所有換行符都被轉義,並且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
很高興看到我剛剛編造的愚蠢理論是正確的:) –
瘋狂物理學家很少有錯誤。 :d – muru
檢查輸出代碼。您可以自己運行'read <<<'以\''結尾的東西,然後執行'echo $?'。我懷疑,允許\轉義最後一個換行符會使'read'退出一個錯誤,因爲它在碰到EOF時需要更多的輸入。另外,請嘗試刪除文件中的最後一個反斜槓,看看會發生什麼。 –