Geben Sie 0 ein
echo foo | xargs -L 1 -I '{}' echo '{}'
Ausgang 0
foo
Eingabe 1
echo foo | xargs -I '{}' -L 1 echo '{}'
Ausgang 1
{} foo
Warum ändert das Ändern der Reihenfolge der Optionen von xargs die Ausgabe?
Version:xargs (GNU findutils) 4.6.0
Akzeptierte Antwort:
Wenn xargs gegebene Optionen in Konflikt geraten, kann die Reihenfolge von Bedeutung sein.
IEEE Std 1003.1-2008, 2016 Edition/Open Group Base Specifications Issue 7 fügte der Spezifikation von xargs den folgenden Text hinzu:
Das -Ich , -L , und -n Optionen schließen sich gegenseitig aus. Einige Implementierungen verwenden die zuletzt angegebene, wenn mehr als eine in einer Befehlszeile angegeben wird; andere Implementierungen behandeln Kombinationen der Optionen auf unterschiedliche Weise.
Dies codiert das Verhalten vieler Implementierungen von xargs und geht zurück auf die Originalversion in PWB/Unix, auf deren Manpage
stehtBei Flag-Konflikten (z. B. -l vs. -n ), hat das letzte Flag Vorrang.
In der GNU-Version von xargs, -L
deaktiviert alle vorherigen -I
Möglichkeit. Also in Ihrem zweiten Beispiel,
echo foo | xargs -I '{}' -L 1 echo '{}'
{}
ist nur ein gewöhnliches Argument, das an echo
übergeben wird , ohne Ersetzung.
Verglichen mit IEEE Std 1003.1, 2004 Edition/Open Group Base Specifications Issue 6.