El más común es GNU getopt estilo, con un guión para opciones cortas y dos guiones para opciones largas.
-
Inicialmente, los programas de Unix aceptaban opciones de una sola letra precedidas por un solo guión y se incluían opcionalmente:
ls -laF ls -l -a -FLos dos comandos anteriores son iguales.
Cuando una opción toma un valor, anula la agrupación:En
gpg -aofoo.gpg,-ay-oson opciones yfoo.gpges el valor dado a-o. -
La mayoría de ellos lo hicieron, de todos modos.
tar cvzfes una vista común. Las versiones actuales aceptantar -cvzftambién, y dependiendo de si agrega el guión, los argumentos se interpretarán de formas muy diferentes. Por ejemplo, estos dos significan lo mismo (tenga en cuenta que las opciones sin guiones no inmediatamente antes de su valor):tar -xf file.tgz -vzO /etc/passwd /var/backupstar xfvzO file.tgz /etc/passwd /var/backupsBSD
pssiempre usa-; SysVpsnunca lo hace. La versión de Linux acepta ambas versiones y cambia su comportamiento dependiendo de si una opción fue prefijada con un guión. (A diferencia del ejemplo tar anterior, ps cambia la opción significados también.) -
Los programas X11 usaban opciones largas precedidas por un solo guión o, a veces, un signo más:
xterm -class FooTerm +vb -u8Esto establece las opciones
classyu8y desarmar elvbopción.El estilo X11 es incompatible con la agrupación de opciones.
-
Posteriormente, se agregaron opciones largas a GNU
getopt()de una forma que sea compatible con las opciones de una letra.gpg -se --no-armor --output=signed.gpgEsto establece
-s,-ey--no-armor(que es opuesto a--armor).Por lo general,
--output=signed.gpgy--output signed.gpgson equivalentes. (Pero no siempre, por ejemplo, curl no acepta lo primero, solo lo segundo).(Si no recuerdo mal, las opciones largas usaban
+como el prefijo antes de que se cambiara a--.) -
La especificación POSIX tiene una sección Sintaxis de argumentos de utilidad, que describe las opciones de un carácter.
La mayoría de los programas de Windows utilizan sus propios analizadores, lo que vuelve locos a los usuarios.
- Algunos requieren
/a /b /c, otros permiten estilo VMS/a/b/c, otros prefieren/abcestilo Unix . - La mayoría usa
/como prefijo, algunos también aceptan-, otros aceptan solo-. - Los valores se pueden dar como
/foo bar,/foo=bar,/foo:bar. - Por lo general, los espacios pueden ser
/quoted "like this", pero algunos programas toman el"como un carácter literal. (Esta es una desventaja de dejar que el programa haga su propia división de palabras; en Unix esto lo maneja el shell). - Los programas multiplataforma pueden usar una implementación de
getopt.
Generalmente, el primero se encuentra en programas más antiguos que están demasiado arraigados para cambiar. Ese tipo de opciones largas son incompatibles con el estándar getopt() función.
El segundo estilo fue introducido por GNU getopt_long() y cumple con los estándares existentes que esperan que el primer estilo incluya opciones cortas (es decir, -orange se espera que signifique -o -r -a -n -g -e ). Se prefiere mucho este estilo de opción larga.