Разница между аргументами и параметрами, относящимися к оболочке linux

В настоящее время я участвую во вступлении к классу Unix/Linux, и мы пришли к вопросу о том, что инструктор и я не соглашались.

cp -i file1 file2

Что верно в отношении предыдущей команды?

  • A. Существует только одна утилита
  • В. Существует один вариант
  • С. Есть три аргумента
  • D. file1 будет скопирован как файл2, и пользователь будет предупрежден раньше перезапись происходит
  • E. Все вышеперечисленное

Я настоял, чтобы он был E. Все вышеперечисленное. Инструктор установил D.

Кажется очевидным, что A, B и D все правильно. Отвесной был C и был ли флаг -i как опцией, так и аргументом.

Моя логика заключалась в том, что все параметры являются аргументами, но не все аргументы являются параметрами, и поскольку в списке есть несколько верных ответов, тогда в традиции с несколькими вариантами ответов ответ более чем вероятно будет E. выше.

Я не смог найти курящее оружие в этом вопросе и думал, что брошу его хозяевам.

Ответы

Ответ 1

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

 $ ls -l junk
-rw-r--r-- 1 you     19 Sep 26 16:25 junk

"Строки, которые следуют за именем программы в командной строке, например -l и junk в приведенном выше примере называются аргументами программы. Аргументы - это обычно варианты или имена файлов, которые будут использоваться командой.

Брайан В. Керниган и Роб Пайк, "среда программирования UNIX"

Ответ 2

На странице здесь говорится:

Обязательные аргументы для длинных опций также обязательны для коротких опций.

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

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

Ответ 3

Хммм... Мне лично нравится различать варианты и аргументы, однако вы можете технически сказать, что параметры являются аргументами. Я бы сказал, что вы правы, но я думаю, что ваш инструктор остановился на D, потому что он не хочет, чтобы вы путали их. Например, следующее эквивалентно приведенной выше команде...:

 ARG1="-i" ; ARG2="file1" ; ARG3="file2" ; cp $ARG1 $ARG2 $ARG3

 ARG1="-i" ; ARG2="file1" ; ARG3="file2" ; cp $ARG2 $ARG1 $ARG3

 ARG1="-i" ; ARG2="file1" ; ARG3="file2" ; cp $ARG2 $ARG3 $ARG1

... тогда как cp $ARG1 $ARG3 $ARG2 не то же самое. Я бы сказал, что параметры - это особый тип аргументов.

Ответ 4

Вот как меня учили, в этом случае сказано:

cp -i file1 file2

Правильный ответ будет A B и D, но не C.

Так как -i является опцией, а file1 и file2 являются аргументами. Обычно считается, что параметры изменяют поведение приложения или команды, где в качестве аргументов нет.

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

Как я все еще определяю разницу и сохраняю разницу между двумя частями команды.

В качестве другого примера команды, cronjobs. Я часто использую PHP cronjobs, и у меня обычно есть как параметры, так и аргументы, связанные с командой. Параметры всегда используются (на мой взгляд) для определения дополнительного поведения, в то время как аргументы предназначены для обеспечения приложения и его поведения с данными, которые ему необходимы для завершения операции.

Изменить

Я согласен с @unwind, что это расщепление волос и на самом деле много раз сводится к сценарию и мнению. Было очень плохо, что он даже отметил это на самом деле, он должен был знать, что это субъективный вопрос. Тесты совершенно несправедливы, когда они заполнены субъективными вопросами.

Ответ 5

Я думаю, что термин "аргументы" используется по-разному в разных контекстах, что является корнем несогласия. В подтверждение вашей позиции, обратите внимание, что время выполнения C, на котором cp, скорее всего, было написано, объявляет точку входа в программу как main(argc, argv) (типы elided), которая, по-видимому, указывает, по крайней мере, на тех, кто проектировал архитектуру C/library/и т.д.. думал о вариантах как подмножество аргументов. Тогда, конечно, параметры могут иметь свои собственные аргументы (разные контексты) и т.д.