[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug in bash? different from ksh, at any rate...




On May 28, 2011, at 2:47 AM, David Sastre wrote:

On Sat, May 28, 2011 at 01:14:42AM -0700, Rick Thomas wrote:

Can anybody explain this difference between the behavior of bash and
ksh?

When reading the man page, I would expect both of them to have the
behavior exhibited by ksh.
Why does bash seem to treat "return" like a single level "break" in
this context?

The "echo "$AA" | while read" is important context.  If I change it
to "for i in 0 1", return does as expected.

If it's any help, changing "return" to "break 2" doesn't help.  with
bash, it still gives "1 1 1 1"
while ksh still gives "1"

I wonder if it has anything to do with "while read" causing a
subshell to be created, and bash getting confused about the "return"
inside of a subshell.  If so, it's a bug in bash that ksh gets
right, so it ought to be fixable.

I can't reproduce it:

$ cat strange.sh
function strange {
for j in 0 1 2 3
do
       AA=' 1
2'
       echo "$AA" | while read i
       do
               echo "$i"
               return
       done
done
}
echo $(strange)

$ bash ./strange.sh
1 1 1 1

$ ksh ./strange.sh
1 1 1 1

ii  bash      4.1-3             The GNU Bourne Again SHell
ii  mksh      39.3.20100725-1   MirBSD Korn Shell

-- Huella de clave primaria: AD8F BDC0 5A2C FD5F A179 60E7 F79B AB04 5299 EC56

As noted in other responses to my question, the behavior depends on how your particular shell does pipes (with or without generating a subshell) You have the "MirBSD Korn Shell". I was using the ksh that calls itself "The real, AT&T version of the Korn shell" which has different behavior.

Thanks for testing!

Rick


Reply to: