Me preguntaba por qué algunos programas requieren que sus parámetros de símbolo del sistema tengan dos guiones delante, mientras que algunos (la mayoría) solo requieren un guión delante.
Por ejemplo, la mayoría de los programas se ven así: relaxer -dtd toc.xml toc_gr.xml toc_jp.xml
Mientras que algunos programas se ven así: xmllint --valid toc.xml --noout
¿Cuál es la razón por la que algunos requieren dos guiones en lugar de uno? ¿No tiene sentido que todos se apeguen a un estándar (es decir, un solo guión servirá)?
linux
windows
command-line
unix
Pacerier
fuente
fuente
-i
vs--input
o-n
--dry-run
.-dtd
realmente debería haber sido--dtd
? Efectivamente, lo que me preguntaba es ¿qué significa el guión (y el guión doble) tratando de significar?--long-options
también aceptarán cualquier abreviatura única. Entonces, para un programa con opciones--file-in
y--file-out
, puede usar--file-o=foo
o--file-i=foo
, que puede ahorrar algo de escritura--very-long-optional-parameters
.convert
,mogrify
) tienen "largo" opciones usando solo un guión. Por ejemplo:xterm -fn 6x10 -geometry 80x24+30+200
. Las abreviaturas son compatibles, siempre que sean distintas ( por ejemplo ,-g
o-geom
para-geometry
). Ver X (7) para otros ejemplos.Respuestas:
Solo hazlo
ls --help
y mira las opciones; debería ser obvio para ti.No tiene nada que ver con los parámetros en absoluto. Muchas opciones tienen una forma corta y una forma larga, y muchas tienen una y no la otra.
Y también, con respecto a los parámetros, es simplemente que, en la forma larga, cuando toman un parámetro, parece que siempre es igual. Pero, obviamente, los cortos pueden tomar los mismos parámetros; solo que no usan iguales.
Aquí hay un extracto de
ls --help
(man ls
da información equivalente). Observe cómo algunos tienen una forma larga y sin una forma corta (--author
,--block-size
), algunos tienen una forma corta y sin una forma larga (-c
,-f
,-g
), y algunos tienen tanto una forma larga y una forma corta (-A
/--almost-all
,-b
/--escape
).fuente
ls --help
en Windows?ls
en Windows. El comando equivalente seríadir /?
. Está utilizando un software multiplataforma que viola las convenciones habituales de Windows, consulte mi respuesta.ls --help
extracto. Ver--author
y--block-size
.ls
comando es a través de GIT . El shell GIT bash o la ventana CMD con GIT bin en la RUTA tendránls
.No hay un estándar generalizado. Hay cierta coherencia, por ejemplo, en los programas GNU, pero debe verificar la documentación de cada programa.
Citando Wikipedia , el énfasis es mío:
Por lo general, los guiones indican un argumento predefinido. Creo que se usa para diferenciarlos de, por ejemplo, nombres de archivos u otras etiquetas que podría usar como argumentos. Sin embargo, ese no es siempre el caso (ver más abajo).
A menudo encontrará el mismo argumento disponible como opción corta y larga, como por ejemplo en ls .
Algunos programas usan un solo guión para las opciones de un carácter y dos guiones para las opciones de varios caracteres, pero no todos (GNU me
find
viene a la mente). Algunos programas tienen guiones opcionales o los omiten por completo (tar
o BSD meps
viene a la mente).A veces, las opciones largas (
--foo
) requieren argumentos, mientras que las opciones cortas (-f
) no (o al menos implican un argumento predeterminado específico).Las opciones cortas (por ejemplo
cut -d ' '
) pueden tener argumentos, mientras que las opciones largas (por ejemplols --all
) no necesariamente las tienen.Para establecer un comportamiento particular de un programa, a veces necesita usar una opción corta, para otros necesita usar una opción larga, y para algunos tiene una opción.
En una nota relacionada, algunos programas no pueden manejar espacios en blanco entre una opción y su argumento , mientras que otros no.
Como escribí al principio, simplemente no hay un comportamiento común o estándar. A menudo, puede rastrear un comportamiento similar a la misma biblioteca utilizada para el análisis de argumentos, pero probablemente no desee leer las fuentes para descubrir esto.
Realmente no se puede inferir la sintaxis de argumento de un programa a partir de la de otro.
Si también considera Windows, empeora aún más: mientras que la línea de comandos de Windows utiliza tradicionalmente
/f
(al menos la mayoría de las veces, caracteres individuales) para las opciones, con:
el separador entre las opciones y su valor (ver, por ejemplo, aquí ); Las utilidades multiplataforma están muy extendidas (como las que menciona) y traen consigo la sintaxis de guiones más común para los argumentos, con todas las inconsistencias mencionadas anteriormente.fuente
tar
,ps
,find
y como tenía su sintaxis de línea de comandos POSIX establecido por esta norma antes había gelificado completamente. En un sistema Gnu / Linux, es una apuesta razonablemente segura que al menos--help
(casi) siempre será compatible, así comoman <command>
oinfo <command>
find
que no sigue la "convención GNU" para opciones largas (probablemente por razones de cumplimiento POSIX, como señaló @BRPocock). Volvería a hacer +1 si pudiera, por mencionar los "interruptores" de la línea de comandos de DOS / Windows, ya que la pregunta del OP de alguna manera fue etiquetada como "ventanas", y esa convención debería mencionarse para completar.Esta es una convención que proviene de * nix. El guión doble precede a las opciones cuando se escriben en su totalidad , mientras que el guión simple precede a las opciones cuando se escriben en forma abreviada . Por ejemplo
ls --all --l
, se puede acortar als -al
. Como se ve, no todas las opciones tienen sus equivalentes de letras únicas, aunque las más usadas suelen tenerlas.Si la opción toma un argumento realmente no hace la diferencia, puede tomarlos o no tomarlos, independientemente de la forma en que ingrese la opción.
Cuando se escriben para un solo uso, en realidad no importa, pero cuando se escriben comandos, por ejemplo, en archivos .alias, es costumbre usar el formulario completo. Puramente por la facilidad de lectura para la próxima persona.
fuente
Estas son sintaxis convencionales de UNIX,
un argumento del programa toma un guión ("-") seguido de una sola letra cuando es una opción simple (por ejemplo: -v ) y dos guiones ("-") cuando la opción toma argumentos (por ejemplo: --file toc.xml o --file = toc.xml )
sin impacto en la funcionalidad del programa.
fuente
--noout
(en la pregunta anterior) realmente debería haberse escrito-noout
ya que no tiene argumentos ?el guión simple es implementado por getopt y es la función estándar posix, el guión doble en getopt_long y es un estándar gnu.
Tradicionalmente, un solo guión proporciona una opción de carácter único como esta:
-A o -V, etc., pero no tiene por qué limitarse a eso. por ejemplo, -Wall for gcc activa todas las advertencias del compilador para el comando compilador gcc.
los argumentos de doble guión tienden a ser más detallados y, a menudo, toman un parámetro proporcionado como --max-count = NUM. Sin embargo, --version no tiene igual.
En términos generales, no hay reglas o estándares definidos sobre cómo deben especificarse los argumentos del programa, solo un montón de tradiciones. Sin embargo, si se utilizan las funciones de análisis de la línea de comandos getopt y getopt_long, los parámetros generalmente deben seguir el estándar, ya que las funciones de la biblioteca imponen una determinada forma de hacerlo.
fuente