shell 数组赋值取值问题

test.txt内容
1
2
3
4
5

shell 内容
#!/bin/bash

i=0
array=()
cat test.txt | while read -r line
do
echo "line="$line
array[$i]="$line"
echo "array[$i] = ${array[$i]}"
i=expr $i + 1
done

echo "array number = ${#array[@]}"

echo ${array[@]}
for var in ${array[@]};
do
echo "var="$var
done

执行shell后返回结果如下:
moonspirit@ubuntu:~/script$ ./test.sh
line=1
array[0] = 1
line=2
array[1] = 2
line=3
array[2] = 3
line=4
array[3] = 4
line=5
array[4] = 5
array number = 0

请问为什么var打印不出之前赋值的类容?

http://www.poluoluo.com/server/201004/82896.html

这是因为使用了管道的原因。当使用管道时,会新开一个shell子进程,循环中用到的array是该子进程中的变量,而不是主进程中的array。所以当循环结束时,主进程中的array仍然是空的