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


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, я міг зустріти цю невідповідність.

Чи існує безперечна офіційна схема називання, на яку я можу посилатися?


Друга форма є 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командного рядка є аргументами утиліти , і всі вони відображаються в позиційних параметрах, якщо це сценарій оболонки. Опція термінів, параметр-аргумент та операнд - більш конкретні назви цих аргументів у командному рядку.

"Прапор" і "перемикач" є загальними синонімами до "варіант".

У випадку

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

Як ви зауважуєте з мого тексту вище, працювати з конспектом утиліти (як це вказано в посібнику програми) було б простіше, ніж намагатися розшифрувати загальну команду, введену в командному рядку. У посібнику буде чітко зазначено, які параметри використовують параметри-аргументи та які аргументи - операнди тощо.

Називати c"значення" - це IMHO цілком нормально. Це не те, що стандартизується, але дуже мало б вас неправильно зрозуміло, якби ви сказали " cце значення, яке даєтьсяb ". Це було б зрозуміло з контексту корисної програми.

Наприклад

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.