15.12.21 um 18:37 schrieb eilf:
Am Mittwoch, 15. Dezember 2021, 17:58:42 CET schrieb Sebastian Siebert:
Hallo,
Vielleicht versteh' ich's nicht richtig, aber der Effekt ist bei mir der gleiche:
# echo -n test1 test2 test3 | xargs -d" " -I {} echo "*{}*" *test1* *test2* *test3*
Alternativ auch dieses Beispiel, was eher deiner Zeile entspricht:
# echo -e "test1\ntest2\ntest3\n" | xargs -I {} echo "*{}*" *test1* *test2* *test3*
Hallo Frank, das Ergebnis ist das gleiche, wie du bereits schon festgestellt hast. Es ging nur darum wie die Daten per stdout vom ersten echo-Kommando via pipe-Operator (|) per stdin an xargs an den zweiten echo-Kommando übergeben werden. Ersteres ist nur eine einzige Zeile mit Leerzeichen getrennt und zweiteres ist pro Zeile ein Ergebnis mit Zeilenumbrüchen getrennt (Standardfall für xargs). Hinten raus ist das Ergebnis wie gesagt identisch. Es gibt auch noch die Möglichkeit Zeichenkette mit dem Steuerzeichen NULL bzw. \0 (ASCII-Code ist tatsächlich 0) zu trennen und macht unter anderem dort Sinn, wenn man eine Liste von Dateinamen an xargs übergeben möchte, die auch Leerzeichen (vielleicht auch mit einem Zeilenumbruch, ja das geht, wenn auch unüblich) im Dateinamen beinhalten können. # echo -n -e "test1 mit leerzeilen\0test2\nmit\nzeilenumbrüchen\0test3\0" | xargs --null -I {} echo "*{}*" Hier mal eine kleine Demonstration, was man mit xargs alles anstellen kann. Beispiel: Wenn ich wissen will, welche Rechte und welchem Besitzer die Dateien mit der Endung .sh im Verzeichnis /usr/bin zugeordnet sind, dann kann ich diese einfach mit dem find-Kommando mit xargs + "ls -la" kombinieren: # find /usr/bin -iname "*.sh" -print0 | xargs --null -I {} ls -la "{}" Vielleicht wird das so für den einen oder anderen Shell-Interessierten verständlicher. -- Gruß Sebastian - openSUSE Member (Freespacer) - Wichtiger Hinweis zur openSUSE Mailing Liste: https://de.opensuse.org/openSUSE:Mailinglisten_Netiquette