GNU/Linux >> LINUX-Kenntnisse >  >> Linux

können xargs Parameter trennen?

warum xargs kleben? bash könnte damit gut umgehen:

p=(`echo "param1 param2"`); echo ${p[0]} ${p[1]}

echo "'param 1' 'param 2'" | xargs -n1 | xargs [email protected] echo \[@\] \[@\]

(In meiner Shell muss ich [] entkommen , Ihr Kilometerstand kann variieren).


Für diejenigen, die dies über eine Suche finden, die akzeptierte Antwort hat bei mir nicht funktioniert.

echo "'param 1' 'param 2'" | xargs -n1 | xargs [email protected] echo \[@\] \[@\]

produziert:

[param 1] [param 1]
[param 2] [param 2]

was nicht den Anforderungen des ursprünglichen Posters entspricht, xargs in mehrere Entitäten einzulesen, sie zu trennen und sie als separate Parameter an einen einzigen Befehl ("echo" im OP) zu senden. Xargs ist für diese Art von Aufgabe nicht ausgelegt!


Die Bash-Antwort kann funktionieren.

p=(`echo "param1 param2"`); echo [${p[0]}] [${p[1]}]

produziert:

[param1] [param2]

aber diese Lösung funktioniert nicht mit mehr als einer Zeile.


Eine korrekte Lösung mit Bash zum Senden von Zeilenpaaren als Argumente an einen einzelnen Befehl ist:

(echo 'param 1'; echo 'param 2'; echo 'param 3'; echo 'param 4') | while read line1; read line2; do echo "[$line1] [$line2]"; done

produziert:

[param 1] [param 2]
[param 3] [param 4]


Die Antwort von GNU Parallel funktioniert, aber GNU Parallel muss erstellt und installiert werden. (Die mit Ubuntu gepackte Version ist nicht GNU Parallel.)


Linux
  1. Kann Bash in seinen eigenen Eingabestrom schreiben?

  2. Mehrere Parameter über Xargs übergeben?

  3. Xargs:Spielt die Reihenfolge der Optionen eine Rolle?

  4. Spezielle Bash-Parameter mit 4 Beispiel-Shell-Skripten erklärt

  5. Bash-Positionsparameter mit 2 Beispiel-Shell-Skripten erklärt

Wie kann ich die Anzahl der Zeichen in einer Bash-Variablen zählen?

Kann eBPF den Rückgabewert oder die Parameter eines Systemaufrufs ändern?

Wie kann ich doppelte Dateien in separaten Verzeichnisbäumen entfernen?

Überprüfen Sie, ob einer der Parameter eines Bash-Skripts mit einer Zeichenfolge übereinstimmt

xargs --replace/-I für einzelne Argumente

Wie kann ich einen Befehl in eine Datei ausgeben, ohne bei einem Fehler eine leere Datei zu erhalten?