Till Halbach wrote: > Bash Version: 2.05b > The bash manual for the control structure 'for name [ in word ] ; do list > ; done' says: > 'The list of words following in is expanded, generating a list of > items.' However, if no files are found, it is set equal to the query > string.
Yes. That is correct. You are apparently mixing two behaviors together. This really has nothing to do with the for loop. The for loop is simply looping through its arguments. This really has to to do with how the shell does pathname expansion which is part of the bigger problem of command line expansion. In your case above don't think about the for loop, think about just the filename expansion. For example you can use "echo" to reduce this to a simpler problem. echo GLOB > Assume you have a directory with some files beginning with 'a' and none > beginning with 'z'. > >for file in a*.html; do echo $file; done > abbr.html > acronym.html > address.html > a.html > applet.html Yes. The glob pattern matched the files in the directory. They are expanded. The for loop is passed the result of the expansion. You can also repeat this simply with echo. echo a*.html The for loop is then looping through all of the arguments provided to it. > >for file in z*.html; do echo $file; done > z*.html Yes. You can repeat this simply with echo. echo z*.html The for loop is then looping through all of the arguments provided to it. You are reporting this as if you think this must be a bug. But this is the correct behavior for a shell to have in this case. > If no files are found, the list of words (represented by word in the > command description above) should expand to a zero-element array, but not > to the word itself. No. That would not match the expected shell behavior. The expected shell behavior is that if the file glob pattern is not expanded by the shell then the string itself will remain verbatim. You can get the behavior you are asking for by setting the "nullglob" shell option. shopt -s nullglob The bash manual has this documentation: nullglob If set, bash allows patterns which match no files (see Pathname Expansion above) to expand to a null string, rather than themselves. Please see the Pathname Expansion section of the bash manual for more information. Bob _______________________________________________ Bug-bash mailing list Bug-bash@gnu.org http://lists.gnu.org/mailman/listinfo/bug-bash