> 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