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?? 展开
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?? 展开
3个回答
展开全部
造成这个问题的原因是while循环位于管道中,这意味着在运行过程中,while循环实际是位于一个新的SHELL中的,while循环中的变量和文件开头定义的变量是两个不同的变量,所以while循环中所改变的值在while循环结束后无法保存下来。解决这个问题的方法就是不要使用管道。
追问
如何查看while循环和循环外是两个shell呢?对管道不是很了解,能详细讲解一下吗?还有那个11行的echo把数据到底输出到哪去了呢?据我所知,在循环开始前将输入流绑定到文件中是可以的,这个重定向感觉好模糊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是小米飞猫说的问题
改成下面的形式
while read line
do
....
done < "$1"
改成下面的形式
while read line
do
....
done < "$1"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
重定向问题好好理解
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询