为什么循环内赋值不影响全局值?
Why assignment inside loop not influence the global value?
我有下一个 data source
和 code
:
数据:
1
2
3
test.sh:
s=0
cat data | while read oneline
do
v=$(($oneline))
s=$(($s+$v))
echo $s
done
echo "Final: $s"
执行:
$ ./test.sh
1
3
6
Final: 0
我想做的是对数据文件中的所有值求和,你可以看到 echo
内部循环成功地逐步打印总和,但在循环外部,我们得到 Final: 0
,应该是 Final: 6
。我犯了什么错误?
管道创建子shell。 while read 运行 在与您的脚本不同的 shell 上。以下将修复它
s=0
while read oneline
do
v=$(($oneline))
s=$(($s+$v))
echo $s
done < data
echo "Final: $s"
我有下一个 data source
和 code
:
数据:
1
2
3
test.sh:
s=0
cat data | while read oneline
do
v=$(($oneline))
s=$(($s+$v))
echo $s
done
echo "Final: $s"
执行:
$ ./test.sh
1
3
6
Final: 0
我想做的是对数据文件中的所有值求和,你可以看到 echo
内部循环成功地逐步打印总和,但在循环外部,我们得到 Final: 0
,应该是 Final: 6
。我犯了什么错误?
管道创建子shell。 while read 运行 在与您的脚本不同的 shell 上。以下将修复它
s=0
while read oneline
do
v=$(($oneline))
s=$(($s+$v))
echo $s
done < data
echo "Final: $s"