Bash指令碼:怎樣一行行地讀檔案(最好和最壞的方法)

unblock發表於2014-07-01

用bash指令碼讀檔案的方法有很多。請看第一部分,我使用了while迴圈及其後的管道命令(|)(cat $FILE | while read line; do … ),並在迴圈當中遞增 i 的值,最後,我得到了非我所想的 i 。主要的原因是,管道命令會發起子shell來讀取檔案,而任何在(子shell的)while迴圈中的操作(例如 i ++),都會隨著子shell的結束而丟失。

而第二種,也是最壞的一種,其最明顯的錯誤就是在讀檔案的過程中使用了for迴圈(for fileline in $(cat $FILE);do ..),這樣每列印一個單詞就換一次行,因為for迴圈使用空格作為預設的IFS。

完美的方法,即第三種的while迴圈(while read line;do …. done < $FILE) 是最合適且最簡單的一行行地讀檔案的方法。請看以下例子。

 

相關文章