Bash变量在for循环中重置(无管道)

时间:2016-06-25 21:11:27

标签: bash

我已将我的代码修改为这个简单的for循环。我不明白为什么计数器tot_add不是累积的,而是一直是1:

cd /path/to/my/workspace;
tot_add=0;
for d in ./*/;
do (cd "$d";
 let tot_add=tot_add+1;
 echo $tot_add;
) done

预期结果:

1
2
3

实际结果

1
1
1

我已经阅读了有关使用Pipe的子shell的答案。

BASH FAQ entry #24: "I set variables in a loop. Why do they suddenly disappear after the loop terminates? Or, why can't I pipe data to read?"

但是,我在这里没有使用竖线字符。

1 个答案:

答案 0 :(得分:2)

()产生一个子shell。

所以它实际上是在子shell中添加的,当子shell退出父shell时没有结果而是从0再次启动,因此你总是得到1。

要解决此问题,请删除子shell。