2016-06-25 7 views
1

私はこの単純なループに自分のコードをトリムダウンしました。カウンターtot_addは、すべての時間ではありません累積ではなく、1なぜ私は理解していない:Bash変数はforループ(パイプなし)でリセットされます

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 
1 
1 

1 
2 
3 

実際の結果パイプ付きサブシェルについて

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

あなたは '(' ... ')'を使用しています。それは明示的にサブシェルを作成します。 – melpomene

答えて

2

()はサブシェルを生成します。

だから、それが実際にサブシェルで追加されたとサブシェルが終了したときに、親シェルは結果ではなく0から再起動していない、ので、あなたは常にを取り除く、この動作を修正するには1.

を取得していますサブシェル。

関連する問題