2016-06-25 8 views
1

Ich habe meinen Code auf diese einfache for-Schleife reduziert. Ich verstehe nicht, warum der Zähler tot_add nicht kumulativ, sondern 1 die ganze Zeit:Bash-Variable wird in for-Schleife zurückgesetzt (keine Pipe)

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

erwartetes Ergebnis:

1 
2 
3 

tatsächliches Ergebnis

1 
1 
1 

ich diese Antwort gelesen habe über Subshell mit Pipe.

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?"

Aber ich bin hier nicht mit Pipe-Zeichen.

+1

Sie verwenden '(' ... ')'. Das erstellt explizit eine Untershell. – melpomene

Antwort

2

() erzeugt eine Subshell.

So ist es tatsächlich in einer Subshell hinzugefügt und wenn der Unterschale die Schale Eltern verlässt nicht die resultierende eher beginnt wieder von 0, daher sind Sie immer 1. bekommen

um dieses Problem zu beheben, loszuwerden die Unterschale.

Verwandte Themen