xargs
- одна из утилит POSIX. Как прокомментировал @drewbenn, POSIX документирует поведение парсинга опций для большинства своих утилит, чтобы оно соответствовало getopt
, с некоторыми допусками для других реализаций, как сказано в 12.1 Синтаксис аргумента служебной программы :
В этом разделе описывается синтаксис аргумента стандартных утилит и вводится терминология, используемая в POSIX.1-2008 для описания аргументов, обрабатываемых утилитами.
В POSIX.1-2008 используется специальная нотация для описания синтаксиса аргументов утилиты. Если не указано иное , все описания утилит используют эту нотацию, которая проиллюстрирована этим примером (см. XCU Простые команды ):
и в заключение
Рекомендуется, чтобы все будущие утилиты и приложения используют эти рекомендации для повышения мобильности пользователей. Тот факт, что некоторые исторические утилиты нельзя было изменить (во избежание поломки существующих приложений), не должен препятствовать достижению этой будущей цели.
В POSIX (помните, что он охватывает только наиболее часто используемые утилиты) есть исключения, которые передают операнды, которые будут опциями в других утилитах как позиционные параметры или параметры. со специальным синтаксисом :
POSIX допускает необязательные значения параметров:
Параметры-аргументы отображаются отделенными от своих параметров символами
, кроме случаев, когда аргумент-параметр заключен в нотации
'['
и']'
, чтобы указать, что это необязательно.
Навскидку, я не помню, какие утилиты POSIX используют эту функцию.Утилиты ncurses tic
и infocmp
используют функцию для уровней параметра -v
(подробный / отладочный).
Конкретный момент, о котором вы спрашивали, подробно описан в оставшейся части этого абзаца, в нескольких строках.
До POSIX некоторые реализации ps
принимали параметры без начального дефиса. В описании POSIX не упоминается, что в описании утилиты или в обосновании синтаксиса:
Помимо POSIX, существуют реализации с длинными параметрами (например, GNU getopt_long ] или X Toolkit ), используя различные способы разделения или присоединения значения опции к опции. Например, может использоваться пунктуация:
--option=value
--option value
В зависимости от реализации, двойной дефис может / не может использоваться для отличия длинных опций от коротких (getopt): lynx и X Toolkit используют одиночное тире ; Например, GNU getopt_long
использует двойное тире. Кроме того, +
может использоваться, чтобы указать, что опция отменена.
В описании POSIX ничего из этого не упоминается, но вы наверняка с ними столкнетесь.