2016-03-03 20 views
2

想要問一些bash中的內容。done while while循環中的{{filename}

當使用while循環我見過使用最後一行,看起來像這樣的:

做< {文件名}

讀取文件時所看到的例子。

while read line; do 
    echo $line 
done < file 

我估計是被檢查了一些布爾語句,但「文件」不以任何方式得到改變。

這究竟意味着什麼?

回答

2

With <你基本上是說發送「文件」的內容到while循環。

完整文檔:Bash Redirections

+0

謝謝,需要習慣來砸語法 – AlphaBeta

5
while read line; do 
    echo $line 
done < file 

這不是bash具體。它將文件重定向到循環的標準輸入。在你顯示的情況下,這轉到read命令。那麼這有什麼問題?

while read line < file # WRONG! 
do 
    echo $line 
done 

這將給出無限循環。爲什麼?因爲read line < file讀取file的第一行。所以呢?那麼它在循環的每次迭代中都會這樣做,不斷讀取文件的第一行。這是因爲它實際上讀取文件的第一行,然後關閉文件,文件位置不保留。

只有當read不成功時(返回非零),循環纔會退出,這通常是在它碰到文件結束(EOF)時。在錯誤的例子中它永遠不會命中EOF,它每次成功讀取第一行,所以我們得到一個無限循環。

的語法也可以用在函數中(雖然你看不到它經常):

myfunc() { 
    while read line; do 
     echo $line 
    done 
} < file 

最後,檢查你明白這一點,這裏將發生什麼?

while read line 
do 
    echo "x" $line 
    cat 
done < file 
+1

尼斯解釋.. + 1 – sat

+0

大謝謝 – AlphaBeta