while read line 与 for 区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了while read line 与 for 区别相关的知识,希望对你有一定的参考价值。
总结一下while read line 与 for循环的区别(白话)
都是读取文件 while read line 以\n为分割符,而for是以空格为分隔符
还有一个需要注意的是从windos拿过来的文件默认行尾都是以\r结尾的,如果不转换linux/unix下就会以为是一行,所以拿过来需要转换一下。还有一个参数IFS是设置分割符的,以下是几个案例:
[email protected] test]# cat iptest.sh
#/bin/bash
IPS="10.1.1.10 3001
10.1.1.10 3003
10.1.1.11 3001
10.1.1.11 3002
10.1.1.11 3004
10.1.1.11 3005
10.1.1.13 3002
10.1.1.13 3003
10.1.1.13 3004
10.1.1.14 3002"
echo "====while test ===="
i=0
echo $IPS | while read line
do
echo $(($i+1))
echo $line
done
echo "====for test ===="
n=0
for ip in $IPS ;
do
n=$(($n+1))
echo $ip
echo $n
done
[[email protected] test]#
结果
[[email protected] test]# sh iptest.sh
====while test ====
1
10.1.1.10 3001 10.1.1.10 3003 10.1.1.11 3001 10.1.1.11 3002 10.1.1.11 3004 10.1.1.11 3005 10.1.1.13 3002 10.1.1.13 3003 10.1.1.13 3004 10.1.1.14 3002
====for test ====
10.1.1.10
1
3001
。。。。。。。
10.1.1.14
19
3002
20
[[email protected] test]有的人说是echo $IPS会将所有输出当成一个整体通过管道传输给下一个进程所以在一行,当然添加IFS="\n"之后肯定你已经猜到了,后边的这个案例是把IPS添加到文件了,这个while和for的区别更明显,结果自己尝试
[[email protected] test]# cat iptest2.sh
#/bin/bash
#IFS="\n"
echo "====while test ===="
while read line
do
echo $line
done < ./ip.log
echo "====for test ===="
for ip in `cat ip.log`;
do
echo $ip
done
[[email protected] test]#
以上是关于while read line 与 for 区别的主要内容,如果未能解决你的问题,请参考以下文章