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