Яка різниця між прапором, опцією та аргументом? [зачинено]


14
  • ls -a(Я розглядаю -aваріант)

  • sudo -u username( -u= варіант, username= arg)

  • chmod 664 my-dir( 664= варіант, my-dir= arg)

Я не можу придумати приклад, який міг би сказати "це прапор", за винятком, можливо, при перегляді списку dir:

-r--------. 1 david david   3344 May 19 17:48 611056.pdf

Тут встановлено "прочитаний прапор" для власника, але це все. Що заважає мені називати це "варіантом читання"?

Я пишу та редагую технічну документацію, насамперед у DocBook XML, і шукаю пояснення різниці, яке є максимально послідовним та точним. Однак я вже бачу формується шаблон:

  1. прапори, як правило, булеві. наприклад,setenforce 0
  2. Параметри допомагають визначити, як повинна вести себе команда. Деякі можуть бути необов’язковими.
  3. Аргументи вказують команди, над яким об'єктом працювати.

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


2
"Що мені заважає дзвонити ..."? О, нічого. Так само, як ніщо не заважає мені називати лопатою дерево.
муру

@muru - хоча словник англійської мови не погодиться з вашим твердженням.
DarkHeart

3
Щоб зробити речі більш заплутаними, я б також назвав параметр, який не приймає параметр / аргумент прапором, як у вашому ls -aприкладі. (Для мене прапор - булева змінна.)
Ульріх Шварц,

3
Вони собачі розплідники ; усі їх тридцять. :-) ⁠
Скотт

Візерунок, який ви бачите, існує лише тому, що ви звужуєте те, що хочете бачити. Один з способів створити файл TAR (який я використовував в протягом більше 30 років) , а не , наприклад , витягти це: tar c abc.txt > x.tar, там cє функція . Ви намагаєтесь назвати цю опцію, і це абсолютно недоречно.
Антон

Відповіді:


17

Не існує послідовних визначень термінів "опція", "аргумент" та "прапор", а в світі розробок програмного забезпечення не існує центрального органу, який міг би застосувати їх використання. Це трапляється із значною термінологією: після 30+ років використання слова "каталог" мені зараз доводиться мати справу з людьми, які використовують слово "папка", які переплутали новомовні Microsoft.

Існують різні способи консенсусного визначення термінів у програмуванні. У випадку "аргумент" / "параметр" / "прапор" канонічні посібники та підручники для мов програмування допомогли забезпечити використання, як і терміни, що використовуються у загальних бібліотеках.

Наприклад, речі, які ви ставите в командному рядку після команди, часто називають "аргументами" для команди, за аналогією з аргументами до виклику функції , і це, ймовірно, частково тому, що їх називають "аргументами" в посібнику C ( звідси argcі argv). Бібліотека argparsePython також допомагає застосувати термін "аргумент". Однак я також бачив, як вони називаються "параметрами".

Термін "варіант" походить від "необов'язковий", що означає, що вони можуть бути залишені. Бібліотека getoptС - це використання цього терміна. Але є прецедент для "опцій", які насправді не є факультативними: наприклад, у argparse посібнику зазначено, що можна створити "необхідний варіант" (хоча він також говорить, що це "загалом вважається поганою формою"). Варіанти часто передують один ( -) або подвійний ( --з довгою опцією) тир, але є добре відомі команди , які не вимагають або забезпечити використання тиру для опцій (наприклад, tar, ps, і dd). Опція може сама брати аргументи (наприклад, -w80та --color=always) або іноді кілька аргументів.

"Прапори", на мій досвід, такі ж, як і варіанти, але зазвичай не беруть аргументи самі і по суті представляють булеві вимикачі вимкнення.

Одним словом, оскільки кожен програміст має змогу спробувати знайти якийсь стандартний спосіб виконання справ та іменування речей, але також може винаходити колесо без особливих зайвих витрат, називання ніколи не буде послідовним. І як тільки ви задокументували свій код, і зрозуміло, який новий сенс ви надали цим словам, наводячи приклади, ці імена та значення можуть просто дотримуватися, якщо буде достатньо людей, які їх забрали з вашого коду.


7

Прапор - це тип опції, опція булевого типу і завжди за замовчуванням є помилковим (наприклад, --verbose, --quiet, --all, --long і т.д.).

Опція вказує функції, як діяти (наприклад, -a, -l, --verbose, --output, -name, -c тощо), а аргументи вказують функції, що потрібно діяти на / з (наприклад *, file1, ім'я хоста, база даних).


Отже, у вашому визначенні, в git pull git://bla/bla, pullаргумент, який говорить про gitте, над чим працювати.
Антон

1
@Anthon ні, є оператори (перемикачі / прапори / параметри), аргументи та команди . pullце команда. Команди можна вважати розширеннями назви програми: git pull <...> еквівалентно програмі, що називається git-pull. Коли програма має команди, кожна команда змушує програму робити щось зовсім інше.
Ziggy Crueltyfree Zeitgeister

Люди git можуть назвати це командою, але це не завжди те, що воно викликається, наприклад, для tarвикористання cдля створення називається функцією . І саме в цьому полягає проблема: немає стандартизації термінів, навіть якщо це виглядає так, як ви думаєте, є з вашої відповіді
Антон

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