[英]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:“我在循环中设置了变量。为什么循环终止后它们突然消失?或者,为什么我不能通过管道传输要读取的数据?”
但是,我在这里不使用竖线字符。
()
产生一个subshell。
因此,它实际上是添加到子shell中的,当子shell退出时,父shell没有结果,而是从0
开始,因此您总是得到1。
若要解决此问题,请摆脱子外壳。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.