请教关于shell变量值的怪问题

请教关于shell变量值的怪问题

在rh9中,写下面的shell程序:
a=0
cat aa | while read line
do
a=1
done
echo $a

其中文件aa是个包含几行文本的文件,
运行这个shell,最后那行echo打出来什么呢?
应该是1吧,为什么我试下来是0?
我在HP-UX上试过,是1,完全正常.

把程序该成:
a=0
while :
do
a=1
break
done
echo $a

最后那行echo打出来就是1了,为什么?
是rh9的bug吗?这个问题怎么解决?
注:我用bash      
1)管道的运用导致一个 sub shell 的产生,因此 a=1 中的 a 变量只在这个 sub shell 中起作用,sub shell 完成之后,它也就消失了

2)如果不用管道而是用重定向就能达到你想要的效果:
复制内容到剪贴板
代码:
#!/bin/sh

a=0
while read line
do
    a=1
done < aa
echo $a
3)不同系统对管道的实现可能不同,因此出现差异是可以理解的      
问题解决了,非常感谢!      
欢迎常来!