Разница между терминами: "вариант", "аргумент" и "параметр"?

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

Ответ 1

Команда разбита на массив строк с именем arguments. Аргумент 0 - это (обычно) имя команды, аргумент 1, первый элемент, следующий за командой, и так далее. Эти аргументы иногда называют позиционными параметрами.

$ ls -la /tmp /var/tmp
arg0 = ls
arg1 = -la
arg2 = /tmp
arg3 = /var/tmp

Параметр option - это документированный тип аргумента, изменяющего поведение команды, например, -l обычно означает "длинный", -v подробный. -lv - это два варианта, объединенные в один аргумент. Есть также длинные параметры, такие как --verbose (см. также Использование getopts для обработки длинных и коротких параметров командной строки). Как следует из их названия, варианты обычно не являются обязательными. Однако есть некоторые команды с парадоксальными "обязательными параметрами".

$ ls -la /tmp /var/tmp
option1= -l
option2= -a

Параметр parameter - это аргумент, который предоставляет информацию либо для команды, либо для одного из ее параметров, например, в -o file файл является параметром опции -o. В отличие от опций, чьи возможные значения жестко запрограммированы в программах, параметры обычно не заданы, поэтому пользователь может использовать любую строку, соответствующую его потребностям. Если вам нужно передать параметр, который выглядит как опция, но не должен интерпретироваться как таковой, вы можете отделить его от начала командной строки двойной чертой: --.

$ ls -la /tmp /var/tmp
parameter1= /tmp
parameter2= /var/tmp

$ ls -l -- -a
option1    = -l
parameter1 = -a

Параметр оболочки shell parameter - это все, что хранит значение в контексте оболочки. Сюда входят позиционные параметры (например, $1, $2...), переменные (например, $foo, $bar...) и специальные специальные символы (например, [email protected])

Наконец, есть подкоманды, также известные как команды функций/(низкоуровневые), которые используются с "метакомандами", которые включают несколько отдельных команд, таких как busybox, git, apt-get, openssl и тому подобное. С ними у вас могут быть глобальные опции, предшествующие подкоманде, и специфичные для подкоманды опции, которые следуют за подкомандой. В отличие от параметров, список возможных подкоманд жестко закодирован в самой команде. например.:

$ busybox ls -l
command            = busybox
subcommand         = ls
subcommand option1 = -l

$ git --git-dir=a.git --work-tree=b -C c status -s
command            = git
command option1    = --git-dir=a.git
command option2    = --work-tree=b
command option3    = -C
subcommand         = status
subcommand option1 = -s

Обратите внимание, что некоторые команды, такие как test, tar, dd и find, имеют более сложный синтаксис синтаксического анализа аргументов, чем описанные ранее, и некоторые или все их аргументы могут быть проанализированы как expressions, operands, keys и подобные компоненты, специфичные для команд.

Ответ 2

Страница man для типичной команды Unix часто использует термины argument, option и parameter. На самом низком уровне у нас есть argument, и все это аргумент, в том числе и сама команда (путь к файловой системе).

В оболочке script вы получаете доступ к аргументам с использованием специальных переменных $0.. $n. Другие языки имеют схожие способы доступа к ним (обычно через массив с именем типа argv).

Аргументы могут быть интерпретированы как опции, если хотите. Как это делается, зависит от реализации. Вы можете либо бросить свой собственный, для примера shell (например, bash) script может использовать предоставленные команды getopts или getopt.

Обычно они определяют параметр как аргумент, начинающийся с дефиса (-), а некоторые параметры могут использовать аргументы в качестве параметров. Более эффективные парсеры (например, getopt) поддерживают смешивание коротких форм (-h) и длинной формы (--help).

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

Поддерживаемые параметры кодируются в программном коде (например, при вызове getopts в оболочке script). Любые оставшиеся аргументы после использования опций обычно называются позиционными параметрами, когда порядок, в котором они указаны, значителен (это отличается от параметров, которые обычно могут быть заданы в любом порядке).

Опять же, script определяет, какие позиционные параметры являются тем, как он потребляет и использует их.

Итак, типичная команда

$ ls -I README -l foo 'bar car' baz

имеет семь аргументов: /usr/bin/ls, -I, README, -l, foo, bar car и baz доступны как $0 thru $6. -l и -I интерпретируются как опции, причем последний имеет параметр (или значение) README. Остаются позиционные параметры (foo, bar car и baz).

Разбор параметров может изменить список аргументов, удалив те, которые он потребляет (например, используя shift или set), так что остаются только позиционные параметры и после этого доступны как $1.. $n.

Ответ 3

Поскольку вопрос помечен как "bash", я искал соответствующие разделы в руководстве по Bash. Я перечисляю их как приведенные ниже отрывки вместе с моими собственными краткими предложениями.

Аргументы

Все, что следует за командой, является аргументом.

Простая команда оболочки, такая как echo a b c, состоит из самой команды, за которой следуют аргументы, разделенные пробелами.

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

Параметры

Аргументы упоминаются как параметры во время выполнения функции.

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

Параметр - это объект, который хранит значения. Это может быть имя, число или один из специальных символов, перечисленных ниже. Переменная - это параметр, обозначаемый именем.

Позиционный параметр - это параметр, обозначаемый одной или несколькими цифрами, отличными от одной цифры 0. Позиционные параметры назначаются из аргументов оболочки при его вызове и могут быть переназначены с помощью встроенной команды set. Позиционный параметр N может указываться как $ {N} или как $ N, когда N состоит из одной цифры.

параметры

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

Опция -p изменяет формат вывода на тот, который указан в POSIX