Разница между аргументами и параметрами, относящимися к оболочке 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/и т.д.. думал о вариантах как подмножество аргументов. Тогда, конечно, параметры могут иметь свои собственные аргументы (разные контексты) и т.д.