一、问题描述
在Linux下执行如下shell,最后输出的数组大小竟然为:0
[root@localhost test]# cat test.sh
filename=$1
array=()
cat $filename | while read line
do
if [ ! -n "$line" ] ;then
break
fi
length=${#array[@]}
array[$length]=$line
echo "[$length] $line"
done
length=${#array[@]}
echo "count=$length"
运行结果如下:
[root@localhost test]# cat data.txt
aaaaaaaaa
bbbbbbbbb
cccccccc
ddddddd
[root@localhost test]# sh test.sh data.txt
[0] aaaaaaaaa
[1] bbbbbbbbb
[2] cccccccc
[3] ddddddd
count=0
二、问题分析与解决
问题原因: 在进行 cat的过程中, 相当于打开了一个新的shell,变量不在作用范围。
问题解决: 使用<方式读取文件内容:
[root@locahost test]# cat test_new.sh
filename=$1
array=()
while read line
do
if [ ! -n "$line" ] ;then
break
fi
length=${#array[@]}
array[$length]=$line
echo "[$length] $line"
done < $filename
length=${#array[@]}
echo "count=$length"
[root@locahost test]# sh test_new.sh data.txt
[0] aaaaaaaaa
[1] bbbbbbbbb
[2] cccccccc
[3] ddddddd
count=4