Page 1 of 1

Mehrzeilige Variable in Einzeilige umwandeln

Posted: 2018-03-16 18:23
by basher
Hallo,

ich habe eine Variable nach dem Muster

Code: Select all

wert1
wert2
wert3
Daraus soll eine Variable nach dem Muster

Code: Select all

wert1 wert2 wert3
gemacht werden. Wenn ich das versuche kommt überhaupt kein Output ($x enthät den mehrzeiligen Inhalt)

Code: Select all

y=$x | tr "\n" " "
echo §y
Fraglich wäre hier ohnehin, ob ich die Leerzeichen bekomme.

Re: Mehrzeilige Variable in Einzeilige umwandeln

Posted: 2018-03-17 02:13
by Joe User
Befehle und Pipes als Values müssen in Backticks gepackt werden, damit sie in einer Subshell ausgeführt und die Ausgabe in der Variablen gespeichert werden kann.

`tr` benöttigt als input einen Stream, was in diesem Fall bedeutet, dass Du "$x" mittels echo zum Stream machen musst. Zudem mag `tr` einfache Hochkommata lieber als doppelte Hochkommata.

In Shellscripts sollten Values möglichst immer gequotet werden, das vermeidet oft Fehler.

Als Ergebnis sollte dann soetwas rauskommen:

Code: Select all

y="`echo "$x" | tr '\n' ' '`"

Re: Mehrzeilige Variable in Einzeilige umwandeln

Posted: 2018-03-17 08:48
by basher
Gibt leider das gleiche aus wie vorher, wieder mit Zeilenumbruch.

Kann es sein, dass am Ende vielleicht gar kein richtiger Zeilenumbruch steht sondern noch mehr? Gibt es eine Möglichkeit sich das (symbolisch) anzeigen zu lassen?

Re: Mehrzeilige Variable in Einzeilige umwandeln

Posted: 2018-03-17 11:44
by Joe User
Wie beziehungsweise durch was wird denn die Variablenliste erzeugt?
Üblich sind "\r" (Apple/MAC), "\n" (UNIX) und "\r\n" (Windows/UNIX) als Zeilenenden.
Möglicherweise kommst Du mit `sed` statt `tr` schneller zum Ziel oder Du konvertierst die Zeilenenden zuerst mit `dos2unix`.
Wenn "$x" ein File ist, dann musst Du `echo` durch `cat` ersetzen.

Am Besten postest Du mal das ganze Script, dann lässt sich besser helfen.