svn commit: r211609 - head/tools/regression/bin/sh/builtins

Brian Somers brian at FreeBSD.org
Mon Aug 23 07:50:01 UTC 2010


On Sun, 22 Aug 2010 11:04:30 +0000 (UTC) Jilles Tjoelker <jilles at FreeBSD.org> wrote:
> Author: jilles
> Date: Sun Aug 22 11:04:30 2010
> New Revision: 211609
> URL: http://svn.freebsd.org/changeset/base/211609
> 
> Log:
>   sh: Add a test for breaking from a loop outside the current function.
>   
>   It is unwise to rely on this but I'd like to know if this would break.
> 
> Added:
>   head/tools/regression/bin/sh/builtins/break3.0   (contents, props changed)
> 
> Added: head/tools/regression/bin/sh/builtins/break3.0
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/tools/regression/bin/sh/builtins/break3.0	Sun Aug 22 11:04:30 2010	(r211609)
> @@ -0,0 +1,15 @@
> +# $FreeBSD$
> +
> +# We accept this and people might rely on it.
> +# However, various other shells do not accept it.
> +
> +f() {
> +	break
> +	echo bad1
> +}
> +
> +while :; do
> +	f
> +	echo bad2
> +	exit 2
> +done

This feature should be counted as a bug IMHO.  How can f() possibly know whether
there's a surrounding context to break from?

Having said that, this behaviour is the same in bash except that bash will complain if
it's asked to break when the context is wrong, perhaps we should complain too?

$ bash -c 'f() { break; echo no break; }; for f in good bad; do echo $f; f; done'
good
$ sh -c 'f() { break; echo no break; }; for f in good bad; do echo $f; f; done'
good
$ bash -c 'f() { break; echo no break; }; f'
bash: line 0: break: only meaningful in a `for', `while', or `until' loop
no break
$ bash -c 'f() { break 2>/dev/null; echo no break; }; f'
no break
$ sh -c 'f() { break; echo no break; }; f'
no break

-- 
Brian Somers                                          <brian at Awfulhak.org>
Don't _EVER_ lose your sense of humour !               <brian at FreeBSD.org>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 306 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/svn-src-all/attachments/20100823/f5474739/signature.pgp


More information about the svn-src-all mailing list