Путаница в изменении значения аргументов и опций, есть ли официальное стандартное определение?

11

Я столкнулся с непонятной вариацией в понимании того, какие варианты и аргументы есть в отношении синтаксиса команд.

Например, я столкнулся с такими определениями:

  • command -a -b -c d e f

    некоторые из них различаются -a -b -c, называть их опциями или переключателями и d e fназывать их аргументами.

  • command -a -b -c d e f

    некоторые, например bashруководство, вызывают все -a -b -c d e fаргументы и объясняют, что все они доступны из скрипта $1 $2 $3 $4 $5 $6соответственно.

  • command -a b=c

    некоторые вызывают -aопцию, bаргумент и cзначение, но другие смешивают их, как в первых двух пунктах, в одном варианте, вызывая все -a b cаргументы.

Эти три версии являются лишь примерами для множества различных вызывающих разновидностей, я даже не знаю, как перечислить их все, но я заметил, что наверняка не существует фиксированного соглашения об именах.

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

Есть ли неоспоримая официальная схема именования, на которую я могу сослаться?

sharkant
источник
Вторая форма на 100% правильна с собственной точки зрения. Контекст очень важен.
Оскар Ског

Ответы:

18

Адаптировано из раздела «Синтаксис служебного аргумента» стандарта POSIX :

utility_name [-a] [-b] [-c option_argument]
             [-d|-e] [-f[option_argument]] [operand...]

Утилита в примере называется utility_name. За ним следуют параметры , параметры-аргументы и операнды .

Аргументы, которые состоят из -символов и отдельных букв или цифр, таких как a, известны как параметры (или, исторически, флаги ). За некоторыми параметрами следует параметр-аргумент , как показано с помощью [-c option_argument]. Аргументы, следующие за последними параметрами и параметрами-аргументами, называются операндами .

Стандарт также определяет «аргумент» как

На языке команд оболочки параметр передается утилите как эквивалент одной строки в argvмассиве, созданном одной из execфункций. Аргумент - это один из параметров, параметров-аргументов или операндов, следующих за именем команды.


Все, что находится utility_nameв командной строке после аргумента утилиты , и все они отображаются в позиционных параметрах, если это сценарий оболочки. Термины option, option-аргумент и операнд являются более конкретными именами этих аргументов в командной строке.

«Флаг» и «переключатель» являются общими синонимами слова «опция».

В случае

utility -a b=c
  • -aи b=cаргументы,
  • -aявляется опцией, если утилита распознает ее как таковую ( lnутилита не имеет -xопцию, поэтому , строго говоря, -xне является опцией lnи ln -xвызовет диагностическое сообщение),
  • b=cопция-аргумент , если-a параметр принимает аргумент, в противном случае это операнд,
  • bи неc являются опциями, опциями-аргументами и не являются операндами сами по себе.

Как вы заметили из моего текста выше, работать с кратким обзором утилиты (как указано в руководстве утилиты) было бы проще, чем пытаться декодировать общую команду, набранную в командной строке. В руководстве будет четко указано, какие параметры принимают аргументы-аргументы, а какие являются операндами и т. Д.

Называть c«значение» ИМХО совершенно нормально. Это не то, что стандартизировано, но очень немногие могут вас неправильно понять, если вы скажете « cэто значение, данноеb ». Это будет ясно из контекста рассматриваемой утилиты.

Например

$ awk -v var="d" '...' data.in

Тот , кто знает о awkбы сказать , что -v var="d"означает « переменной присваивается значение в командной строке ».awkvard

Кусалананда
источник