for
loop glob to prevent wordsplitting, e.g. "$dir"/*.txt
.for file in $dir/*.txt
do
echo "Found $file"
done
for file in "$dir"/*.txt
do
echo "Found $file"
done
When iterating over globs containing expansions, you can still quote all expansions in the path to better handle whitespace and special characters.
Just make sure glob characters are outside quotes. "$dir/*.txt"
will not glob expand, but "$dir"/*.txt
or "$dir"/*."$ext"
will.
Exceptions similar to SC2086 apply. If the variable is expected to contain globs, such as if dir="tmp/**"
in the example, you can ignore this message.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.