while read line 與for迴圈的區別

weixin_34353714發表於2018-11-15

while read line 與for迴圈的區別

while read line讀取file檔案裡的內容,是以一行一行的形式寫入到變數line中,並且是一次性將檔案資訊讀入並賦值給變數line;
for迴圈是每次讀取檔案中一個以空格為分割符的字元換。
如下舉例:
#!/bin/bash
IPS="1001
2001
3001
4001
5001
6001
7001
8001"

echo "###while read line###"
i=0
echo $IPS | while read line  【因為這裡echo $IPS 本身的值即為1001 2001 3001 4001 5001 6001 7001 8001;所以是被看做是一行】
do
  i=$(($i+1))
  echo $i
  echo $line
done

echo "###for###"
n=0
for ip in $IPS;
do
  n=$(($n+1))
  echo $n
  echo $ip
done

結果:可以看出while read line是一次性賦值給了line變數,for迴圈是每次以空格為分割符後的字串賦值
###while read line###
1
1001 2001 3001 4001 5001 6001 7001 8001
###for###
1
1001
2
2001
3
3001
4
4001
5
5001
6
6001
7
7001
8
8001

另:
file.txt內容為:
1001
2001
3001
4001
5001
6001
7001
8001
#!/bin/bash
while read line
do
  echo $line
done < file.txt
結果:
1001
2001
3001
4001
5001
6001
7001
8001
解釋:
因為是一行一行的寫入到line變數中,故echo $line的結果也是一行一行的顯示

相關文章