Принятие -!
в дополнение к стандартному !
(и аналогично для других операторов пунктуации: (
, )
и специфичный для GNU ,
) - это причуда парсера командной строки GNU найти. Код будет немного легче написать, если он не отклоняет -!
и тому подобное как плохо сформированные. С -! В противном случае
было бы ошибкой, нет ничего плохого в том, чтобы принять это. Стандарт POSIX ничего не говорит о том, что -!
означает: что касается стандарта, это предикат, определяемый реализацией, который можно свободно использовать для обозначения того, что они хотят.
Вот обзор того, как работает код в GNU find:
-
, чтобы код был немного меньше и быстрее. look_like_expression
, чтобы определить, выглядит ли аргумент как предикат. Предикаты начинаются с -
, за исключением операторов с одним знаком препинания. find_parser
игнорирует начальные -
, если они есть. Это та точка, где различие между !
и -!
потеряно. look_like_expression
или find_parser
может отклонить -
, за которым следует символ пунктуации. Но в любом случае для этого потребуется дополнительный код без реальной пользы.