2010-01-20 7 views
13

In Bourne-Shell habe ich folgendes:Entfernen Zeilenumbrüche in Bourne Shell aus variablen

VALUES=`some command that returns multiple line values` 

echo $VALUES 

Sieht aus wie:

"ONE" 
"TWO" 
"THREE" 
"FOUR" 

Ich mag es würde so aussehen:

"ONE" "TWO" "THREE" "FOUR" 

Kann jemand helfen?

+0

Wollen Sie eine Reihe von 4 Strings, oder wollen Sie die einzelne Zeichenfolge „eins zwei drei vier“? –

+0

nit: Der Befehl in Backticks (warum nicht stattdessen $()?) Gibt mehrere Werte nicht zurück. Es gibt mehrere Zeilen aus und gibt einen einzelnen Wert zurück, hoffentlich Null. –

+0

William, sehr vereinfachte Version. Ich nehme tatsächlich die Ausgabe der Backticks, mache etwas Arbeit an den Daten in VALUES, als später VALUES auszugeben. –

Antwort

40

echo $VALUES | tr '\n' ' '

+0

arbeitete wie ein Charme, danke eliah –

+1

Nizza. Nur ein Tweak: in bash und zsh zumindest können Sie in der env var ohne Echo mit <<<, d. H. Tr '\ n' '' <<< $ VALUES. – liwp

+1

@liwp +1 für den netten Tipp. BTW, wie man die entgehende Zeichenkette mit '' '' '' 'tr -d '\ n' <<<" einer Zeile mit Zeilenvorschub \ n "' übergibt. die Zeichenfolge entgeht nicht '\ n' im doppelten Zitat, wie ich es erwartet hatte, irgendeine Idee? – mko

0

Eine weitere Option ist mit xargs (das allerdings eine abschließende Newline hält - statt einer möglichen Leerzeichen am Ende mit tr):

echo $VALUES | xargs 
printf '%s\n' 1 2 3 4 5 | xargs 

@yozloy: Wie maskierten String

mit <<< passieren
tr -d '\n' <<< "`printf '%b' 'a line with line feed \n'`" 
2

Eine andere Methode, wenn Sie nicht nur Ihren Code ausdrucken möchten, sondern assig n es auf eine Variable, und nicht einen falschen Platz am Ende hat:

$ var=$(tail -1 /etc/passwd; tail -1 /etc/passwd) 
$ echo "$var" 
apache:x:48:48:Apache:/var/www:/sbin/nologin 
apache:x:48:48:Apache:/var/www:/sbin/nologin 
$ var=$(echo $var) 
$ echo "$var"  
apache:x:48:48:Apache:/var/www:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin 
1

Die akzeptierte Lösung nicht für mich arbeiten (auf OS X Yosemite). Dies ist, was ich verwendet:

echo -n $VALUES