Там нет широко распространенного стандарта. Существует некоторая согласованность, например, в программах GNU, но вы должны проверить документацию каждой программы.
Цитирую Википедию , выделю мое:
В Unix-подобных системах ASCII-дефис-минус обычно используется для указания опций. За символом обычно следуют одна или несколько букв . Аргумент, который представляет собой один дефис-минус сам по себе без букв, обычно указывает, что программа должна обрабатывать данные, поступающие со стандартного ввода, или отправлять данные на стандартный вывод. Два дефиса-минус (()) используются в некоторых программах для указания «длинных опций», где используются более описательные имена опций . Это общая черта программного обеспечения GNU.
Обычно дефисы указывают предопределенный аргумент. Я думаю, что он используется, чтобы отличать их, например, от имен файлов или других меток, которые вы можете использовать в качестве аргументов. Это не всегда так (см. Ниже).
Вы часто найдете один и тот же аргумент доступным как короткий, так и длинный вариант, как, например, в ls .
Некоторые программы используют один дефис для односимвольных параметров и два дефиса для многосимвольных, но не все ( find
на ум приходит GNU ). Некоторые программы имеют дополнительные дефисы или пропускают их вообще ( tar
или BSD ps
приходит на ум).
Иногда long options ( --foo
) требует аргументов, в то время как short options ( -f
) не требует (или, по крайней мере, подразумевает определенный аргумент по умолчанию).
Короткие опции (например cut -d ' '
) могут иметь аргументы, в то время как длинные опции (например ls --all
) не обязательно имеют их.
Чтобы установить определенное поведение программы, вам иногда нужно использовать короткий параметр, для других вам нужно использовать длинный параметр, а для некоторых у вас есть выбор.
С другой стороны, некоторые программы не могут обрабатывать пробелы между опцией и ее аргументом , а другие - нет.
Как я писал в начале, просто нет общего поведения или стандарта. Зачастую вы можете проследить поведение, аналогичное той же библиотеке, которая использовалась для разбора аргументов, но вы, вероятно, не хотите читать источники, чтобы выяснить это.
Вы действительно не можете вывести синтаксис аргументов одной программы из синтаксиса другой.
Если вы также рассматриваете Windows, это становится еще хуже: в то время как вызовы командной строки Windows традиционно используют /f
(по крайней мере, большую часть времени, одиночные символы) для опций, :
в качестве разделителя между опциями и их значением (см., Например, здесь ); кросс-платформенные утилиты широко распространены (например, те, о которых вы упоминаете) и содержат более распространенный синтаксис для аргументов со всеми упомянутыми выше несоответствиями.
-i
против--input
или-n
--dry-run
.