webentwicklung-frage-antwort-db.com.de

Wie halte ich Zeilenumbrüche ein, wenn ich eine Befehlsausgabe in einer Variablen in Bash abspeichere?

Ich verwende die bash Shell unter Linux. Ich habe dieses einfache Skript…

#!/bin/bash

TEMP=`sed -n '/'"Starting deployment of"'/,/'"Failed to start context"'/p' "/usr/Java/jboss/standalone/log/server.log" | tac | awk '/'"Starting deployment of"'/ {print;exit} 1' | tac`
echo $TEMP

Wenn ich dieses Skript jedoch ausführe

./temp.sh

alle Ausgaben werden ohne Wagenrücklauf/neue Zeilen gedruckt. Ich bin nicht sicher, ob ich die Ausgabe in $ TEMP oder den Echo-Befehl selbst speichere.

Wie kann ich die Ausgabe des Befehls in einer Variablen speichern und die Zeilenumbrüche beibehalten?

42
Dave

Zitat deine Variablen. Hier ist es warum:

$ f="fafafda
> adffd
> adfadf
> adfafd
> afd"

$ echo $f
fafafda adffd adfadf adfafd afd

$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd

Ohne Anführungszeichen ersetzt die Shell $TEMP durch die darin enthaltenen Zeichen (eines davon ist ein Zeilenvorschub). Vor dem Aufruf von echo teilt Shell diese Zeichenfolge mithilfe von Internal Field Separator (IFS) in mehrere Argumente auf und übergibt die resultierende Liste der Argumente an echo. Standardmäßig ist die Variable IFS auf Leerzeichen (Leerzeichen, Tabulatoren und Zeilenumbrüche) gesetzt, sodass die Shell Ihre $TEMP-Zeichenfolge in Argumente zerlegt und die Zeilenumbrüche nie sehen kann, da die Shell sie wie ein Leerzeichen als Trennzeichen betrachtet.

105
jaypal singh

Ich bin auf das gleiche Problem gestoßen, ein Zitat wird helfen

[email protected]:~/apps$ apps="abc
> def"
[email protected]:~/apps$ echo $apps
abc def
[email protected]:~/apps$ echo "$apps"
abc
def
0
Bob