Hello good people,
It seems there is a bug which I
will describe below.
I checked with usenet
comp.unix.shell people and they said that is strange behavior.
I am using Z-shell 5.8. The
problem is when I add elements to an array with += inside a
function, an empty element is generated. The empty element is
added only if I set array $files as local.
The following is an example code.
#!/bin/zsh
#!/bin/bash
func()
{
local REPLY files
#unset files
for REPLY in file1 file2 file3
do
files+=( "$REPLY" )
echo "${#files[@]} -- ${files[@]}"
done
}
func
If I set $files to local but unset it before the loop, the empty
element is not added. Running the script with zsh returns:
2 -- file1
3 -- file1 file2
4 -- file1 file2 file3
While if we run the code with bash:
1 -- file1
2 -- file1 file2
3 -- file1 file2 file3
I was actually using a while read loop to read filenames, but the
problem also occurs when I use the for loop.
So the workaround suggested is
to set $files as local and then later define files=( ) which will
prevent empty element being added somehow.
Thanks for all your efforts in
making zsh so great!