问题描述
下面两段代码第一段,无法正确统计文件行数,count在循环中的计算,出了循环就无效了第二段,count2出了循环依然有效初学shell,不太明白这是为什么,希望大家指点一下ps:第一段代码应该如何修改,才能达到第二段的效果#!/bin/bashcount=0cat "$1" | while read linedo count=$[ $count + 1 ]doneecho "$count line(s) in all."#-----------------------------------------count2=0;for var in a b cdo count2=$[ $count2 + 1 ]doneecho "$count2 line(s) in all."
解决方案
shell 在管道中改变变量是无效的 有很多方法可以做到 比如wc 当然你如果硬要用while改成这样1.#!/bin/bash 2.count=0 3. 4.while read line 5.do 6. count=$[ $count + 1 ] 7.done < file8. 9.echo "$count line(s) in all." 具体可以查看:http://sumit.blog.51cto.com/162317/271554http://bbs.chinaunix.net/thread-1661629-1-1.htmlhttp://zhidao.baidu.com/link?url=mXrgoibdctnZBoEgdFPt49sa4yTgtaQuexvZS28ZH293W3nww5wIoF7Nj3M9g3fr8OxiiyHCBljAfiwWH1v6kahttp://linux.sheup.com/linux/linux5525.htmhttp://www.linuxidc.com/Linux/2011-04/34889.htmhttp://blog.csdn.net/astraylinux/article/details/7280906http://xuyongtao630.blog.163.com/blog/static/8618328320115276915626/