Zsh Mailing List Archive
Messages sorted by:
RFC: &&/|| vs. & operator precedence
Sorry if this has been discussed before -- it's hard to search for '&'
in the archives.
On all other shells,
true && false || foo &
launches 'true && false || foo' as a background job. On zsh (including
sh mode), only 'foo' is the background job.
IOW, the '&' operator on other POSIX shells takes an entire AND-OR
(&&/||) list as the background job, whereas on zsh, only the last
command is taken as the background job.
POSIX says in 2.9.3:
| A list is a sequence of one or more AND-OR lists separated by the
| operators ';' and '&'.
but later on in 126.96.36.199:
| If a command is terminated by the control operator <ampersand> ( '&'
| ), the shell shall execute the command asynchronously in a subshell.
So that is quite ambiguous. The first suggests that '&' should act like
most POSIX shells do, the second suggests it should act like zsh does.
This ambiguity is basically the subject of an Austin Group bug opened by
He is proposing that POSIX should prescribe the behaviour of the
majority, which would make zsh non-compliant as of the next POSIX edition.
An alternative might be to make this unspecified instead, so that both
zsh and other shells are compliant as is, and cross-platform scripters
would be expected to use explicit braces where necessary (as they
already have to do now).
So, in anticipation of this being resolved one way or another in POSIX,
it might be worth discussing what (if anything) should change in zsh. I
think the opinion of the zsh maintainers matters here.
Would it be feasible to make zsh act like other POSIX shells in sh
emulation mode only? I could imagine that being difficult as this
touches on shell grammar, not builtins.
If not, would it be acceptable to change the precedence of these
operators to match other POSIX shells in zsh as a whole? How many old
zsh scripts could that break?
modernish -- harness the shell
Messages sorted by: