GNU/Linux >> Tutoriels Linux >  >> Linux

Xargs :L'ordre des options est-il important ?

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.


Linux
  1. Comment Rm -r procède-t-il à la suppression récursive ? Dans quel ordre?

  2. Pourquoi `md5sum` ne donne-t-il pas le même hachage qu'Internet ?

  3. Dans `while Ifs=Read..`, Pourquoi Ifs n'a-t-il aucun effet ?

  4. Lire ligne par ligne dans le script bash

  5. xargs peut-il séparer les paramètres ?

Comment le noyau Linux détermine-t-il l'ordre des appels __init ?

Que fait `set -x` ?

xargs --replace/-I pour les arguments simples

Que signifie l'option sw dans /etc/fstab ?

Que fait % dans les chaînes du shell Linux ?

Comment bash teste-t-il 'faux'?