Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

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:
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_03
| A list is a sequence of one or more AND-OR lists separated by the
| operators ';' and '&'.

but later on in 2.9.3.1:
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_03_02
| 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 Stéphane Chazelas:
http://austingroupbugs.net/view.php?id=1254

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?

- Martijn

--
modernish -- harness the shell
https://github.com/modernish/modernish



Messages sorted by: Reverse Date, Date, Thread, Author