SC2066
Vidar Holen edited this page Oct 4, 2015
·
3 revisions
Pages 490
-
- Since you double quoted this, it will not word split, and the loop will only run once.
- Problematic code:
- Correct code:
- Loop over each line without globbing (hello world, My *.png)
- Loop over each word with globbing (hello, world, My, file.png, My cat.png):
- Loop over each line with globbing (hello world, My cat.png)
- Rationale:
- Exceptions
Clone this wiki locally
Since you double quoted this, it will not word split, and the loop will only run once.
Problematic code:
for s in "$(mycommand)"; do echo "$s"; doneCorrect code:
The correct code depends on your intention. Let's say you're in a directory with the files file.png and My cat.png, and you want to loop over a command that outputs (or variable that contains):
hello world
My *.png
Loop over each line without globbing (hello world, My *.png)
mycommand | while IFS= read -r s; do echo "$s"; done
Loop over each word with globbing (hello, world, My, file.png, My cat.png):
# relies on the fact that IFS by default contains space-tab-linefeed
for s in $(mycommand); do echo "$s"; done
Loop over each line with globbing (hello world, My cat.png)
# explicitly set IFS to contain only a line feed
IFS='
'
for s in $(mycommand); do echo "$s"; doneRationale:
You get this warning because you have a loop that will only ever run exactly one iteration. Since you have a loop, you clearly expect it to run more than once. You just have to decide how it should be split up.
Exceptions
None.