linux中while循环中的重定向问题

1#!/bin/bash2if[$#-lt1]3then4echo"Usage:$0filename"5exit16fi7count=18cat$1|whilereadl... 1 #!/bin/bash
2 if [ $# -lt 1 ]
3 then
4 echo "Usage:$0 filename"
5 exit 1
6 fi
7 count=1
8 cat $1 | while read line
9 do
10 [ $count -eq 1 ] && echo "processing file $1..">/dev/tty
11 echo $count $line
12 count=`expr $count + 1`
13 done >temp$$
14 echo $count
15 mv temp$$ $1

该程序的第十一行为啥在屏幕上不输出??
第十四行的count还是1??
展开
 我来答
小米飞猫
2012-07-31 · 专注于IT监控领域技术
小米飞猫
采纳数:1651 获赞数:4811

向TA提问 私信TA
展开全部
造成这个问题的原因是while循环位于管道中,这意味着在运行过程中,while循环实际是位于一个新的SHELL中的,while循环中的变量和文件开头定义的变量是两个不同的变量,所以while循环中所改变的值在while循环结束后无法保存下来。解决这个问题的方法就是不要使用管道。
追问
如何查看while循环和循环外是两个shell呢?对管道不是很了解,能详细讲解一下吗?还有那个11行的echo把数据到底输出到哪去了呢?据我所知,在循环开始前将输入流绑定到文件中是可以的,这个重定向感觉好模糊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rm_2013
2012-08-01 · TA获得超过459个赞
知道小有建树答主
回答量:281
采纳率:100%
帮助的人:163万
展开全部
是小米飞猫说的问题

改成下面的形式

while read line
do
....
done < "$1"
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
昶靓V舞
2013-05-13
知道答主
回答量:4
采纳率:0%
帮助的人:10万
展开全部
重定向问题好好理解
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式