On Mon, Oct 07, 2019 at 08:05:12PM +0700, pepa65 wrote:
> > On Sat, Oct 05, 2019 at 06:48:35PM +0000, George R Goffe via Bug reports 
> > for the GNU Bourne Again SHell wrote:
> >> I was expecting to see:
> >> 12345
> > 
> > If you want to create a *list* and iterate over that list, one element
> > at a time, use arrays instead of string variables.
> > 
> > x=(1 2 3 4 5)
> > for z in "${x[@]}"; do
> >   echo "$z"
> > done
> 
> Just to be clear (as nobody has mentioned this) to get them all on the
> same line, you need "echo -n", and you can do this without using arrays:
> 
> x="1 2 3 4 5"
> for z in $x
> do echo -n "$z"
> done

This has some issues.  echo -n will fail if one of the list elements is
an option recognized by echo.  The unquoted $x expansion will fail if
one of the list elements is a glob that matches some files, or a glob
that matches no files if nullglob is active.

Also, the list-in-a-string gives you absolutely no way to handle list
elements that contain internal whitespace.  This is what arrays are for.
Please use the arrays.

x=(1 2 3 4 5 -n '/*' 'hello world')
for z in "${x[@]}"; do
  printf %s "$z"
done
echo

Reply via email to