Por ejemplo:
xargs -n 1
es lo mismo que
xargs -n1
Pero si nos fijamos en la página del manual , la opción aparece como -n max-args
, lo que significa que se supone que se debe preservar el espacio. No hay nada sobre la forma abreviada -n max-args .
Esto también sucede con muchas otras utilidades de Linux.
¿Cómo se llama esto en Linux? ¿Todas las utilidades admiten el formulario abreviado (pero nunca lo documentan en la página del manual)?
Respuestas:
Cuando escribe el bit de análisis de la línea de comando de su código, especifica qué opciones toman argumentos y cuáles no. Por ejemplo, en un script de shell que acepta una
-h
opción (por ejemplo, ayuda) y una-a
opción que debería tomar un argumento, ustedEl
a:h
bit dice "Estoy esperando a analizar dos opciones,-a
y-h
, y-a
debería tener una discusión" (que es el:
después dea
que le dice al analizador que-a
toma un argumento).Por lo tanto, nunca hay ambigüedad sobre dónde termina una opción, dónde comienza su valor y dónde comienza otra después de eso.
Ejecutándolo:
Es por eso que la mayoría de las veces no debe escribir su propio analizador de línea de comandos para analizar las opciones.
Solo hay un caso en este ejemplo que es complicado. El análisis generalmente se detiene en la primera no opción, por lo que cuando tiene cosas en la línea de comando que parecen opciones:
Lo siguiente resuelve eso:
Las
--
señales de una gama de opciones de línea de comandos, y el-world
bit se deja para el programa para hacer lo que quiera con (está en una de las variables de posición).Así es, por cierto, cómo elimina un archivo que tiene un guión al comienzo de su nombre de archivo
rm
.EDITAR :
Utilidades escritas en llamada C
getopt()
(declarada enunistd.h
) que funciona más o menos de la misma manera. De hecho, por lo que sabemos, labash
funcióngetopts
puede implementarse usando una llamada a la función de biblioteca Cgetopt()
. Perl, Python y otros lenguajes tienen bibliotecas de análisis de línea de comando similares, y es muy probable que realicen su análisis de manera similar.Algunos de estos
getopt
ygetopt
-como rutinas de biblioteca también se encargan de opciones "largos". Estos generalmente están precedidos por doble guión (--
), y las opciones largas que toman argumentos a menudo lo hacen después de un signo igual, por ejemplo, la--block-size=SIZE
opción de [algunas implementaciones de] ladu
utilidad (que también permite-B SIZE
especificar lo mismo).La razón por la cual los manuales a menudo se escriben para mostrar un espacio entre las opciones cortas y sus argumentos es probablemente para facilitar la lectura.
EDITAR : Las herramientas realmente antiguas, como las utilidades
dd
ytar
, tienen opciones sin guiones delante de ellas. Esto es solo por razones históricas y para mantener la compatibilidad con el software que depende de ellos para funcionar exactamente de esa manera. Latar
utilidad ha ganado la capacidad de tomar opciones con guiones en tiempos más recientes. El manual BSD paratar
llamar a las opciones de estilo antiguo para "banderas agrupadas".fuente
getopt()
(declarado enunistd.h
), que hace lo mismo.-a -b
===-ab
-a
tiene un argumento opcional,-ab
no es lo mismo que-a -b
). GNU getopt no detiene el procesamiento de banderas cuando se encuentra con una no bandera: en su lugar (por defecto), en cambio reorganiza las banderas al frente de argv.xargs
es una de las utilidades POSIX. Como comentó @drewbenn, POSIX documenta el comportamiento de análisis de opciones para que coincidan la mayoría de sus utilidadesgetopt
, con algunos permisos para otras implementaciones, diciendo en 12.1 Sintaxis de argumento de utilidad :y concluyendo con
Dentro de POSIX (recuerde que cubre solo las utilidades más comúnmente utilizadas), hay excepciones que pasan operandos que serían opciones en otras utilidades como parámetros posicionales o parámetros con sintaxis especial :
POSIX permite valores opcionales opcionales:
Por casualidad, no recuerdo qué utilidades POSIX usan la función. Los ncurses
tic
y lasinfocmp
utilidades utilizan la función para los niveles de la-v
opción (detallado / depurar).El punto específico sobre el que preguntó se detalla en el resto de ese párrafo, en varias líneas.
Antes de POSIX, algunas implementaciones de
ps
opciones aceptadas sin un guión principal. La descripción POSIX no menciona que en la descripción de la utilidad o en la justificación de la sintaxis:Además de POSIX, hay implementaciones de opciones largas (como GNU getopt_long o X Toolkit ), que utilizan una variedad de formas para separar o unir el valor de una opción a la opción. Por ejemplo, se puede usar la puntuación:
Dependiendo de la implementación, un doble guión puede / no puede usarse para distinguir las opciones largas de las cortas (getopt): lynx y X Toolkit usan un solo guión; GNU
getopt_long
usa un doble guión, por ejemplo. Además,+
se puede usar a para indicar que una opción está negada.La descripción de POSIX no parece mencionar ninguno de estos, pero es probable que los encuentre.
fuente
-option=value
supone que es--option=value
? (El formato de opción larga, dos guiones al principio en lugar de uno)