You are given `-n` and `-z` for the same reason that other test suites give you both `==` and `!=`, or `AND` and `NOT`. Some test cases can be made a lot clearer to future maintainers by eschewing double-negatives. Also, as mentioned in an above comment, ancient incarnations of `sh` (i. e. the Bourne and Thompson shells), as opposed to modern POSIX `sh` did not have a `!` keyword to negate the truthiness of `test` expressions.