Sh-test, bug or not?

CK nibbana at gmx.us
Fri Jan 15 04:31:37 UTC 2016


If you have authoritative knowledge on the subject,
please state if this functionality is correct:

$ [ ! "" -a "" ] && echo pass || echo fail
pass
$ [ ! 11 -a "" ] && echo pass || echo fail
pass

The "-a" operator binds stronger than the "!" operator.
Intuition based on functionality in awk/C would suppose
that the "!" operator would bind stronger than the "-a"
operator, especially since "-a" does in fact have higher
precedence than the "-o" operator, as in awk/C.

In order to make it work as "expected", it gets ugly:

$ [ ! "" -a "" ] && echo pass || echo fail
pass
$ [ \( ! "" \) -a "" ] && echo pass || echo fail
fail

$ [ ! 11 -a "" ] && echo pass || echo fail
pass
$ [ \( ! 11 \) -a "" ] && echo pass || echo fail
fail

I never noticed this in 20 years, so I don't know if it always
worked this way, or if something changed in my upgrade from
4.11 to 9.3.



More information about the freebsd-questions mailing list