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