ls -a
(Я рассматриваю-a
вариант)sudo -u username
(-u
= опция,username
= аргумент)chmod 664 my-dir
(664
= опция,my-dir
= аргумент)
Я не могу вспомнить пример, который мог бы сказать «это флаг», разве что, если посмотреть на листинг каталога:
-r--------. 1 david david 3344 May 19 17:48 611056.pdf
Здесь установлен флаг чтения для владельца, но это все. Что мешает мне называть это «опцией чтения»?
Я пишу и редактирую техническую документацию, в основном на DocBook XML, и я ищу объяснения различий, которые являются последовательными и максимально точными. Тем не менее, я уже вижу формирование шаблона:
- флаги, как правило, булевы. например,
setenforce 0
- Параметры помогают определить, как должна вести себя команда. Некоторые могут быть необязательными.
- Аргументы говорят командам, с каким объектом работать.
Я мог видеть себя комбинирующим флаги и опции (некоторые опции могут иметь дюжину возможных значений, но логические только два). Аргументы кажутся достаточно разными, чтобы поддерживать их как таковые.
ls -a
примере. (Для меня флаг - это логическая переменная.)tar c abc.txt > x.tar
, тамc
есть функция . Вы пытаетесь назвать это вариантом, и это совершенно неуместно.Ответы:
Не существует согласованных определений терминов «опция», «аргумент» и «флаг», и в мире разработки программного обеспечения нет централизованного органа, который мог бы обеспечить их использование. Это происходит с большой терминологией: после 30 с лишним лет использования слова «каталог», мне теперь приходится иметь дело с людьми, использующими слово «папка», которые были сбиты с толку новичками Microsoft.
Существуют разные способы достижения согласованных определений терминов в программировании. В случае «аргумента» / «опции» / «флага» канонические руководства и учебные пособия для языков программирования помогли обеспечить использование, как и термины, используемые в общих библиотеках.
Например, вещи, которые вы помещаете в командную строку после команды, часто называют «аргументами» команды, по аналогии с аргументами вызова функции , и это, вероятно, частично потому, что они называются «аргументами» в руководстве по C ( отсюда
argc
иargv
). Библиотекаargparse
Python также помогает применять термин «аргумент». Однако я также видел, что их называют «параметрами».Термин «опция» происходит от «необязательного», что означает, что они могут быть опущены. Библиотека
getopt
C является одним из употреблений этого термина. Но есть прецедент для «опций», которые на самом деле не являются необязательными: например, вargparse
руководстве говорится, что можно создать «обязательную опцию» (хотя в нем также говорится, что это «обычно считается плохой формой»). Варианты часто предшествуют один (-
) или двойной (--
с длинной опцией) тир, но есть хорошо известные команды , которые не требуют или обеспечить использование тира для опций (например,tar
,ps
, иdd
). Опция сама может принимать аргумент (например,-w80
и--color=always
) или иногда несколько аргументов.«Флаги», по моему опыту, такие же, как параметры, но обычно не принимают аргументы сами по себе и по сути представляют собой булевы переключатели.
В более широком смысле, поскольку у каждого программиста есть возможность попытаться найти какой-то стандартный способ выполнения задач и присвоения имен, но также можно изобретать колесо без особых дополнительных затрат, присвоение имен никогда не будет последовательным. И как только вы задокументируете свой код, и станет ясно, какое новое значение вы придаете этим словам, приводя примеры, эти имена и значения могут просто придерживаться, если будет достаточно людей, которые подберут их из вашего кода.
источник
Флаг - это тип параметра, параметр булева типа, и по умолчанию он всегда ложный (например, --verbose, --quiet, --all, --long и т. Д.).
Опция сообщает функции, как действовать (например, -a, -l, --verbose, --output, -name, -c и т. Д.), В то время как аргументы указывают функции, что делать с / с (например
*
, file1, имя хоста, база данных).источник
git pull git://bla/bla
, тоpull
есть аргумент , который говорит ,git
что работать.pull
это команда. Команды можно рассматривать как расширение имени приложения: git pull <...> эквивалентно вызываемому приложениюgit-pull
. Когда приложение имеет команды, каждая команда заставляет приложение делать что-то совершенно другое.tar
, использованиеc
для создания называется функцией . И это именно проблема: нет стандартизации терминов, даже если кажется, что вы думаете, что есть из вашего ответа