mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC2165 (markdown)
35
SC2165.md
Normal file
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.
|
Reference in New Issue
Block a user