From: Oliver Kiddle <opk@zsh.org>
To: Bart Schaefer <schaefer@brasslantern.com>
Cc: Zsh hackers list <zsh-workers@zsh.org>
Subject: Re: "break" and functions
Date: Fri, 29 Mar 2024 18:38:46 +0100 [thread overview]
Message-ID: <43539-1711733926.063834@011r.oEGd.QZp_> (raw)
In-Reply-To: <CAH+w=7bb9BKUCvqCb=A-Qw36+HVn-NszP2DfQeXsYmKs-HVWFg@mail.gmail.com>
Bart Schaefer wrote:
> When adding this, I ran into a puzzling effect:
>
> % while :; do; echo ${|REPLY=x;break}; done
> x
> % while :; do; () { echo "$@" } ${|REPLY=x;break}; done
> %
>
> That is, breaking the loop skips the function call but does not skip
> the builtin.
My expectation would have been for either an error message saying
break: not in while, until, select, or repeat loop`
or that because the break is run before the builtin that the builtin
would never get to run. But the implementation of break is just putting
a value in the breaks integer variable so I guess that variable isn't
checked until after the builtin is run. The anonymous function is
perhaps a two-stage process for defining and then running. Note:
while :; do; () { echo hello } > ${|REPLY=x;break}; done
creates an empty file named x.
When suggesting the test, the exact behaviour was not something I cared
strongly about provided it wasn't seg fault, infinite loop or similar.
In the case of
repeat 3 print c*(oe:'break':)
it might be a useful feature if break applied to the internal loop over
globbed files causing print to run but only with those files that were
matched so far. false works as a continue in that case.
If you're choosing which of the two cases in 52151 is wrong,
I'd say that with the purr() function is right because the break is run
before the print (or purr).
And possibly, it should be an error message for "not in a while, ..."
It also rather surprises me that the break here even works:
br() { break }
while : ; do
br
done
Oliver
next prev parent reply other threads:[~2024-03-29 17:39 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-03-29 1:54 Bart Schaefer
2024-03-29 9:30 ` Mikael Magnusson
2024-03-29 16:28 ` Bart Schaefer
2024-03-29 16:56 ` Bart Schaefer
2024-03-29 17:38 ` Oliver Kiddle [this message]
2024-03-29 18:51 ` Bart Schaefer
2024-03-29 21:14 ` Mikael Magnusson
2024-03-29 22:02 ` Bart Schaefer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43539-1711733926.063834@011r.oEGd.QZp_ \
--to=opk@zsh.org \
--cc=schaefer@brasslantern.com \
--cc=zsh-workers@zsh.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).