linux while为何变量不发生变化?

来源:百度知道 编辑:UC知道 时间:2024/09/22 15:53:27
我在输入文件inputtext中一行写入一个数字,再运行如下的脚本
#!/bin/bash
sum=0
cat inputtext |while read line
do
echo $line
s1=`echo $line`
sum=`expr $s1 + $sum`
echo $sum
done
echo $sum
为什么中间显示的$sum的值都正常,可是最后显示的$sum的值为0

因为管道后的while loop是 sub shell, 所以不会生效,改成
#! /bin/bash
sum=0
while IFS= read -r line
do
echo "$line"
((sum++))
done < inputtext
echo "$sum lines in inputtext"

看看结果

中间的SUM应该是临时环境变量,你循环退出后就不存在了,而最后显示
的SUM是你在文件开始时定义的。