Мне было интересно, почему некоторые программы требуют, чтобы их параметры командной строки имели две черты впереди, тогда как некоторым (большинству) требуется только одна черта впереди?
Например, большинство программ выглядят так: relaxer -dtd toc.xml toc_gr.xml toc_jp.xml
В то время как некоторые программы выглядят так: xmllint --valid toc.xml --noout
В чем причина того, что некоторым требуется две черты вместо одной? Разве для всех не имеет смысла придерживаться одного стандарта (то есть, подойдет только один штрих)?
linux
windows
command-line
unix
Pacerier
источник
источник
-i
против--input
или-n
--dry-run
.-dtd
самом деле должно было быть--dtd
? По сути, мне было интересно узнать, что пытается показать тире (и двойной тире) ?--long-options
будут также принимать любые уникальные сокращения. Таким образом, для программы с опциями--file-in
и--file-out
, вы можете использовать--file-o=foo
или--file-i=foo
, что может сохранить некоторые набрав для--very-long-optional-parameters
.convert
,mogrify
) есть «длинные» варианты, использующие только одну черту. Например:xterm -fn 6x10 -geometry 80x24+30+200
. Сокращения поддерживаются, если они различны ( например ,-g
или-geom
для-geometry
). Смотрите X (7) для других примеров.Ответы:
Просто сделайте
ls --help
и посмотрите на варианты; это должно быть очевидно для вас.Это никак не связано с параметрами. Многие варианты имеют краткую форму и длинную форму, и многие имеют один, а не другой.
А также, что касается параметров, это просто, что в длинной форме, когда они принимают параметр, это выглядит так, как будто это всегда с равными. Но очевидно, что короткие могут принимать параметры точно так же; просто они не используют равных.
Вот выдержка из
ls --help
(man ls
дает эквивалентную информацию). Обратите внимание на то, как некоторые из них имеют длинную форму без краткой формы (--author
,--block-size
), некоторые из них имеют короткую форму без длинной формы (-c
,-f
,-g
), а некоторые из них как длинной формы и короткая форма (-A
/--almost-all
,-b
/--escape
).источник
ls --help
на окнах?ls
в Windows. Эквивалентная команда будетdir /?
. Вы используете кроссплатформенное программное обеспечение, которое нарушает обычные правила Windows, см. Мой ответ.ls --help
отрывке есть длинные варианты без коротких вариантов . Смотрите--author
и--block-size
.ls
команду, - через GIT . GIT bash shell или окно CMD с GIT bin в PATH будут иметьls
.Там нет широко распространенного стандарта. Существует некоторая согласованность, например, в программах GNU, но вы должны проверить документацию каждой программы.
Цитирую Википедию , выделю мое:
Обычно дефисы указывают предопределенный аргумент. Я думаю, что он используется, чтобы отличать их, например, от имен файлов или других меток, которые вы можете использовать в качестве аргументов. Это не всегда так (см. Ниже).
Вы часто найдете один и тот же аргумент доступным как короткий, так и длинный вариант, как, например, в ls .
Некоторые программы используют один дефис для односимвольных параметров и два дефиса для многосимвольных, но не все (
find
на ум приходит GNU ). Некоторые программы имеют дополнительные дефисы или пропускают их вообще (tar
или BSDps
приходит на ум).Иногда long options (
--foo
) требует аргументов, в то время как short options (-f
) не требует (или, по крайней мере, подразумевает определенный аргумент по умолчанию).Короткие опции (например
cut -d ' '
) могут иметь аргументы, в то время как длинные опции (напримерls --all
) не обязательно имеют их.Чтобы установить определенное поведение программы, вам иногда нужно использовать короткий параметр, для других вам нужно использовать длинный параметр, а для некоторых у вас есть выбор.
С другой стороны, некоторые программы не могут обрабатывать пробелы между опцией и ее аргументом , а другие - нет.
Как я писал в начале, просто нет общего поведения или стандарта. Зачастую вы можете проследить поведение, аналогичное той же библиотеке, которая использовалась для разбора аргументов, но вы, вероятно, не хотите читать источники, чтобы выяснить это.
Вы действительно не можете вывести синтаксис аргументов одной программы из синтаксиса другой.
Если вы также рассматриваете Windows, это становится еще хуже: в то время как вызовы командной строки Windows традиционно используют
/f
(по крайней мере, большую часть времени, одиночные символы) для опций,:
в качестве разделителя между опциями и их значением (см., Например, здесь ); кросс-платформенные утилиты широко распространены (например, те, о которых вы упоминаете) и содержат более распространенный синтаксис для аргументов со всеми упомянутыми выше несоответствиями.источник
tar
,ps
,find
и такие были их синтаксис командной строки , установленный POSIX , прежде чем этот стандарт был полностью загущенным. В системе Gnu / Linux вполне разумно делать ставку, что, по крайней мере--help
, (почти) всегда будет поддерживаться, а такжеman <command>
илиinfo <command>
find
который не следует «соглашению GNU» для длинных опций (вероятно, по причинам соответствия POSIX, как указывало @BRPocock). Я бы снова +1, если бы мог, за упоминание «переключателей» командной строки DOS / Windows, поскольку вопрос ОП как-то помечен как «окна», и это соглашение следует упомянуть для полноты.Это соглашение от * nix. Двойной дефис предшествует опциям, когда они написаны полностью , в то время как одиночный дефис предшествует опциям, когда они написаны в краткой форме . Например
ls --all --l
, можно сократить доls -al
. Как видно, не все варианты имеют свои однобуквенные эквиваленты, хотя обычно используются более часто используемые варианты.То, принимает ли параметр аргумент, на самом деле не имеет значения - оно может принимать или не принимать их, независимо от способа ввода параметра.
При написании их для однократного использования это не имеет большого значения, но при написании команд, например, в файлах .alias, обычно используется полная форма. Чисто для удобства чтения для следующего человека.
источник
это обычные синтаксисы UNIX,
программный аргумент принимает один дефис ("-"), за которым следует одна буква, когда это простая опция (например, -v ), и два дефиса ("-"), когда опция принимает аргументы (например: --file toc.xml или --file = toc.xml )
не влияет на функциональность программы.
источник
--noout
(в приведенном выше вопросе) должно было быть написано так,-noout
поскольку оно не имеет аргументов ?одиночная черта реализована getopt и является стандартной функцией posix, двойная черта в getopt_long и является стандартом GNU.
Традиционно, одна черта предоставляет опцию одного символа, например:
-A или -V и т. Д., Но не должны ограничиваться этим. Например, -Wall для gcc включает все предупреждения компилятора для команды компилятора gcc.
Аргументы с двойной чертой имеют тенденцию быть более многословными и часто принимают предоставленный параметр, например --max-count = NUM. Однако --version не имеет себе равных.
Вообще говоря, нет никаких правил или определенных стандартов относительно того, как должны указываться программные аргументы, просто набор традиций. Однако, если используются функции синтаксического анализа командной строки getopt и getopt_long, то параметры должны, как правило, соответствовать стандарту, поскольку библиотечные функции применяют определенный способ сделать это.
источник