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 -F
Los dos comandos anteriores son iguales.
Cuando una opción toma un valor, anula la agrupación:En
gpg -aofoo.gpg
,-a
y-o
son opciones yfoo.gpg
es el valor dado a-o
. -
La mayoría de ellos lo hicieron, de todos modos.
tar cvzf
es una vista común. Las versiones actuales aceptantar -cvzf
tambié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/backups
tar xfvzO file.tgz /etc/passwd /var/backups
BSD
ps
siempre usa-
; SysVps
nunca 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 -u8
Esto establece las opciones
class
yu8
y desarmar elvb
opció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.gpg
Esto establece
-s
,-e
y--no-armor
(que es opuesto a--armor
).Por lo general,
--output=signed.gpg
y--output signed.gpg
son 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/abc
estilo 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.