Entrée 0
echo foo | xargs -L 1 -I '{}' echo '{}'
Sortie 0
foo
Entrée 1
echo foo | xargs -I '{}' -L 1 echo '{}'
Sortie 1
{} foo
Pourquoi changer l'ordre des options de xargs change la sortie ?
Version :xargs (GNU findutils) 4.6.0
Réponse acceptée :
Lorsque les options données à xargs sont en conflit, l'ordre peut avoir de l'importance.
IEEE Std 1003.1-2008, 2016 Edition/Open Group Base Specifications Issue 7 a ajouté le texte suivant à la spécification de xargs :
Le -je , -L , et -n les options sont mutuellement exclusives. Certaines implémentations utilisent la dernière spécifiée si plusieurs sont données sur une ligne de commande ; d'autres implémentations traitent les combinaisons d'options de différentes manières.
Cela codifie le comportement de nombreuses implémentations de xargs, en remontant à la version originale dans PWB/Unix, dont la page de manuel indique
Lorsqu'il y a des conflits de drapeaux (par exemple, -l vs -n ), le dernier drapeau a priorité.
Dans la version GNU de xargs, -L
désactive tout -I
précédent option. Donc, dans votre deuxième exemple,
echo foo | xargs -I '{}' -L 1 echo '{}'
{}
est juste un argument ordinaire passé à echo
, sans qu'aucune substitution ne soit effectuée.
Par rapport à IEEE Std 1003.1, 2004 Edition/Open Group Base Specifications Issue 6.