Конвенция / стандарт об использовании фигурных скобок вокруг параметров

10

Страница man для tar в разделе SYNOPSIS Arch Linux начинается с:

tar {A|c|d|r|t|u|x}[GnSkUWOmpsMBiajJzZhPlRvwo] [ARG...]

Я прекрасно понимаю, что в этой ситуации это означает, что должен быть указан именно один из вариантов в фигурных скобках, потому что так сказано ниже на странице руководства. Есть ли какой-то стандарт или соглашение об использовании {} вокруг списка взаимоисключающих опций?

Все, что я могу найти, - это групповое руководство пользователяman от 1998 года, где говорится:

Некоторые варианты будут иметь ограниченный список вариантов. Список вариантов будет разделен запятой и заключен в фигурные скобки.

{choice1, choice2} {да, нет}

Похоже, что каждое соглашение (например, это из Open Group ) или man-страница описывает только квадратные скобки ([) или вертикальные линии (|).

umbasa
источник
1
Обычно я считаю <>это обязательным, но я полагаю, что это зарезервировано для аргументов, а не вариантов. Счетчик: версия man- страницы GNU tar для Ubuntu ( например , manpages.ubuntu.com/manpages/trusty/en/man1/tar.1.html ) не использует эту форму, как и linux.die.net/man/ 1 / tar или Debian . Я думаю, что вы, возможно, просматриваете справочную страницу BSD tar, поэтому, если существует соглашение, это может быть вещь BSD.
Муру
вверх по течению для man-страниц arch находится man7.org , страница tar точно такая же, как man7.org/linux/man-pages/man1/tar.1.html .
Умбаса
2
Я всегда думал, что синтаксис командной строки исходит из ENBF , но {} в ENBF означает с точностью до наоборот (повторение аргумента вместо одного возможного выбора, как в ситуации с tar). Я попытался использовать синтаксис google {}, ориентированный на Windows, и кажется, что {} очень распространен в Windows, в нем даже есть описание technet . Вздох, Может быть, я слишком стараюсь найти правду.
Умбаса

Ответы:

5

Это отличный вопрос (и до сих пор открытый 3 года спустя). Я думаю, что ответ теперь официально дан ответ в этом документе Google :

  • Требуемые предметы: нет бэкетов
  • Дополнительные взаимоисключающие элементы: квадратные скобки, разделители труб
  • Необходимые взаимоисключающие предметы: фигурные скобки, разграниченные трубы
TSG
источник
1

Есть ли какой-то стандарт или соглашение об использовании {} вокруг списка взаимоисключающих опций?

Я исследовал значение значения опций, указанных в фигурных скобках ({}), против опций, указанных в квадратных скобках ([]), когда натолкнулся на ваш вопрос. Это был единственный источник информации, который я нашел полезным в отношении того, что я пытался понять, а именно, почему варианты указаны в фигурных скобках.

Как вы написали:

Я прекрасно понимаю, что в этой ситуации это означает, что именно один из них должен быть дан ...

Читая справочную страницу для netstat, я пришел к выводу, что параметры - это те параметры, которые доступны для использования с командой, которые должны использоваться / указываться перед использованием любых других параметров, которые могут быть перечислены с помощью команды И точно только один из перечисленных параметров разделенные вертикальной чертой могут быть использованы.

Пример вышесказанного можно найти на странице man для команды netstat:

netstat {--route | -r} [address_family_options] [--extend | -e [- extend | -e]] [--verbose | -v] [--numeric | -n] [--numeric-hosts ] [- числовые порты] [- числовые порты] [--continuous | -c] [задержка]

Источник: netstat (8) | Страница руководства по Linux

По сути, можно использовать ровно одно из --route или -r (они означают одно и то же), но этот параметр должен предшествовать другим перечисленным параметрам.

Я только нашел время ответить на ваш вопрос, потому что вопрос, кажется, остается открытым, но мне кажется, что вы ответили на свой вопрос :)

Конвенция - это просто широко распространенная практика. Независимо от того, указано это явно или нет, тот факт, что вы регулярно находите документы man в этом формате, указывает на то, что соглашение (при условии, что я правильно изложил это выше) твердо установлено.

Есть ли «стандарт»? Для меня это зависит от того, какое определение вы хотите принять для «стандарта». Для меня практически нет различия между значением слова «конвенция» и «стандарт» в том смысле, что мы используем здесь термин. В этом смысле я считаю, что эти два слова означают что-то вроде «того, что взаимно согласовано, используется и принимается как норма».

Спасибо за ваше время, помогая мне понять эту конвенцию / стандарт.

Даррен Гансберг
источник