-L
divise par lignes; echo
ne sépare pas sa sortie par des lignes mais par des espaces, donc un seul ls -l
est exécuté et qui formate toutes les colonnes en tant que groupe.
-n
divise par paramètres ; en l'absence de -L
ou -0
, le séparateur est un espace (éventuellement modifié par des guillemets), donc chaque nom de fichier a son propre ls -l
exécuter et il n'y a aucun moyen pour les exécutions indépendantes de coordonner les largeurs de colonne.
La norme POSIX impose :
-L
numéroL'utilitaire doit être exécuté pour chaque
number
non vide lignes d'arguments de l'entrée standard. La dernière invocation de l'utilité doit être avec moins de lignes d'arguments s'il reste moins de nombre. Une ligne est considéré comme se terminant par le premier sauf si le dernier caractère de la ligne est un<blank>
; un<blank>
à la fin signale la continuation vers la prochaine ligne non vide, inclus.
-n
numéroInvoquer l'utilitaire en utilisant autant d'arguments d'entrée standard que possible, jusqu'à nombre (un entier décimal positif) arguments maximum.
(C'est nous qui soulignons.) Depuis echo *
produit une seule ligne, xargs -L 1
envoie simplement tous les noms de fichiers à ls
immédiatement, et alors seulement ls
alignez bien les colonnes.
(En d'autres termes, votre première commande équivaut à ls -l index.html*
, sauf qu'il ne gère pas correctement les noms de fichiers contenant des espaces.)