> What do you think should happen in the following case?
> ! exit 1 | exit 2 | exit 3

To my mind the '!' operator should have had a higher precedence during
parsing command line arguments than the pipe and applied only to the
command it was immediately preceding. So that in

! command1 | command2 | command3

it would only negate command1. If one wanted to negate the final exit
code of the whole pipe something like

! { command1 | command2 | command3; }

could be used. To my mind '!' looks pretty much like a unary operator
and '|' like a binary one.
 And in many programming languages unary operators usually have a
higher precedence than binary.

> Why should $PIPESTATUS not reflect the actual exit statuses?

It of course should. But the question was what is the actual or
expected exit status in

! test 0 -eq 0

Reply via email to