【shell】while循环中的变量无法保存问题

问题SHELL举例:

#!/bin/sh
Counter=0
ls /opt/src/ | while read LINE
do
let "Counter=Counter+1"
done
echo $Counter

该SHELL用于计算/opt/src/中有多少文件,但实际运行中无论/opt/src/下有多少文件,最后输出都是0。
经查,造成这个问题的原因是while循环位于管道中,这意味着在运行过程中,while循环实际是位于一个新的SHELL中的,while循环中的Counter变量和文件开头定义的Counter变量是两个不同的变量,所以while循环中所改变的值在while循环结束后无法保存下来。

解决办法:

#!/bin/sh
Counter=0
ls /opt/src/ > /tmp/t1.txt
while read LINE
do
let "Counter=Counter+1"
done < t1.txt
rm /tmp/t1.txt -f
echo $Counter