i'll note that Automake tests have been using `if ! ...` since 1.12 (2012),
The automake *tests* intentionally use modern shell syntax and functionality, because they go to a lot of trouble to set up an environment where those are supported, via test-init.sh. t/README talks about this ("prefer using POSIX constructs ..."), and much else. Some previous maintainers made that decision. User-level scripts, non-test configure.ac's, etc., are another matter, and should follow the "maximum portability" rules. --thanks, karl.