Created SC2165 (markdown)

koalaman
2015-07-19 11:45:15 -07:00
parent 029274665b
commit a7e76c99cd

35
SC2165.md Normal file

@@ -0,0 +1,35 @@
## This nested loop overrides the index variable of its parent.
And companion warning "This parent loop has its index variable overridden."
### Problematic code:
for((i=0; i<10; i++))
do
for i in *
do
echo "$i"
done
done
### Correct code:
for((i=0; i<10; i++))
do
for j in *
do
echo "$j"
done
done
### Rationale:
When nesting loops, especially arithmetic for loops, using the same loop variable can cause unexpected results.
In the problematic code, `i` will contain the last filename from the inner loop, which will be interpreted as a value in the next iteration out the outer loop. This results in either an infinite loop or a syntax error, depending on whether the last filename is a valid shell variable name.
In nested for-in loops, variable merely shadow each other and won't cause infinite loops or syntax errors, but reusing the variable name is rarely intentional.
### Exceptions:
None.