mirror of
https://github.com/koalaman/shellcheck.git
synced 2025-10-03 19:29:44 +08:00
Created SC2043 (markdown)
38
SC2043.md
Normal file
38
SC2043.md
Normal file
@@ -0,0 +1,38 @@
|
||||
## This loop will only run once, with var=value
|
||||
|
||||
### Problematic code:
|
||||
|
||||
for var in value
|
||||
do
|
||||
echo "$var"
|
||||
done
|
||||
|
||||
### Correct code:
|
||||
|
||||
Correct code depends on what you want to do.
|
||||
|
||||
To iterate over files in a directory, instead of `for var in /my/dir` use:
|
||||
|
||||
for var in /my/dir/* ; do echo "$var"; done
|
||||
|
||||
To iterate over lines in a file or command output, use a while read loop instead:
|
||||
|
||||
mycommand | while IFS= read -r line; do echo "$line"; done
|
||||
|
||||
To iterate over *words* written to a command or function's stdout, instead of `for var in myfunction`, use
|
||||
|
||||
for var in $(myfunction); do echo "$var"; done
|
||||
|
||||
To iterate over *words* in a variable, instead of `for var in myvariable`, use
|
||||
|
||||
for var in $myvariable; do echo "$var"; done
|
||||
|
||||
|
||||
|
||||
### Rationale:
|
||||
|
||||
ShellCheck has detected that your for loop iterates over a single, constant value. This is most likely a bug in your code, caused by you not expanding the value in the way you want.
|
||||
|
||||
### Contraindications
|
||||
|
||||
None.
|
Reference in New Issue
Block a user