|
楼主 |
发表于 2011-4-1 18:26:18
|
显示全部楼层
Post by zhy2111314;2132952
1. 是否应该是 IFS=":"?
2. 第1个问题跟while的机制有关系,如果while后的命令执行成功,或条件真,则执行do和done之间的语句,执行完成后,再次判断while后的命令和条件;如果while后的命令执行失败,或条件为假,循环结束。这样每次都执行成功又从while开始执行,只能重复显示第一行。
3. 第一个循环相当于 cat /etc/passwd | while read ...,整个/etc/passwd文件的每一行都进行while处理,直到文件结束,类似的写法还有很多,比如http://www.cnblogs.com/motadou/archive/2010/01/13/1646602.html。重定向跟记忆好像没有什么关系,就是从一个输出给另一个的输入,类似管道的概念,然后处理。 我的意思是这样的:这两个循环,所作的第一步工作是不是都先读取/etc/passwd中的内容?不同的是第一个/etc/passwd在循环的外面,第一次执行的时候就把数据一次性全部读到内存中,然后read读取一行进行一次循环,然后内存里的指针自动指向下一行数据(read一次只能读取一行数据),读完后while条件变为假,跳出循环。第二个循环,/etc/passwd在循环里面,执行第一次循环,读取第一行数据,到第二次时循环重新来过,还是读取文件的第一行,因此这个循环一直读的就是第一行,while条件一直为真,所以造成死循环。
不知道我这样理解对不对,说的太罗嗦了,不知道你能不能看懂我想表达的 |
|