繁体   English   中英

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

[英]Bash variable resets in for loop (no pipe)

我已经将代码精简为这个简单的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子壳的答案。

BASH常见问题解答条目24:“我在循环中设置了变量。为什么循环终止后它们突然消失?或者,为什么我不能通过管道传输要读取的数据?”

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

()产生一个subshel​​l。

因此,它实际上是添加到子shell中的,当子shell退出时,父shell没有结果,而是从0开始,因此您总是得到1。

若要解决此问题,请摆脱子外壳。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM