Respuesta corta :
Porque está programado para ignorar los múltiples usos de una bandera.
Respuesta larga:
Como puede ver en el código fuente de ls, hay una parte con la función getopt_long()y un gran caso de cambio:
1648 int c = getopt_long (argc, argv,
1649 "abcdfghiklmnopqrstuvw:xABCDFGHI:LNQRST:UXZ1",
1650 long_options, &oi);
....
1654 switch (c)
1655 {
....
1707 case 'l':
1708 format = long_format;
1709 break;
....
1964 }
La función getopt_long()lee todos los parámetros dados al programa. En caso de que se establezca -lla variable format. Entonces, cuando escribe múltiples, -lllllllllesa variable se establece varias veces, pero eso no cambia nada.
Bueno, cambia una cosa. Esta gran declaración de caso de cambio debe ejecutarse varias veces, debido a múltiples -lindicadores. lsnecesita más tiempo para completarse con múltiples -lbanderas. Pero esta vez no vale la pena mencionar. =)
Porque es lo correcto. Suponga que tiene un script que hace algo como:
donde es posible que
$LS_OPTIONSya contenga-l. Sería contraintuitivo y molesto que este comando produjera un error y requeriría una lógica adicional en el script para evitarlo.-lPuede que no sea el mejor ejemplo para esto, pero espero que pueda ver cómo se aplica el concepto en general. Un ejemplo mucho mejor son las opciones del compilador, ya$CFLAGSque podrían duplicar opciones explícitas en una invocación particular del compilador.fuente
lscon algún conjunto de opciones.-lsulsalias parece una mala idea, es probable que surja el mismo problema con las opciones que son agradables en unlsalias interactivo como-po--color=auto.ls.llpodría ser un alias parals -l, y en un sistema con ese alias, podría escribirll -lart.lsno es unbashcomando, sino un ejecutable separado desde el que se iniciabash. Dicho esto,-les solo un tipo de bandera booleana, que si está presente hacelsque use un formato de estilo largo para la salida. La mayoría de los programas simplemente ignorarán los usos múltiples (ls -lles lo mismo quels -l -l) de tales indicadores, aunque hay algunas excepciones (como ejemplo, si-vsignifica 'detallado', entonces un programa puede interpretar múltiples usos para que signifiquen "ser aún más detallado").fuente
-vvvesssh.aptitude mooLos alias de Shell serían bastante molestos si los comandos como
lsno permitieran opciones repetidas.Supongamos que tuvieras
Entonces, si no se permitieran indicadores en conflicto, sería un error emitir comandos como
ls --color=neverols --color=autoorm -i.Por lo tanto, estos comandos están diseñados para permitir que las marcas posteriores anulen las anteriores.
fuente
--inplacey--delay-updates, por ejemplo). Algunas herramientas solo toman lo que viene al final;rm -ifEs probablemente un buen ejemplo allí. Pero no hay conflicto en la opción -l de ls, por lo tanto,ls -lyls -llno es un problema, y que no afecta a la ejecución de cualquier manera significativa. Las computadoras son buenas para la repetición que adormece la mente.