Ich benutze 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
Die gesamte Ausgabe wird ohne Wagenrücklauf / neue Zeilen gedruckt. Ich bin mir nicht sicher, ob ich die Ausgabe auf diese Weise in $ TEMP oder im Echo-Befehl selbst speichere.
Wie speichere ich die Ausgabe des Befehls in einer Variablen und behalte die Zeilenumbrüche / Zeilenumbrüche bei?
don't
speicherncommands
invariables
.Use
einfunction
stattdessenAntworten:
Zitieren Sie Ihre 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 wird die Shell
$TEMP
durch die darin enthaltenen Zeichen ersetzt (eines davon ist eine neue Zeile). Bevor Sie dieecho
Shell aufrufen , wird diese Zeichenfolge mithilfe desInternal Field Separator
(IFS) in mehrere Argumente aufgeteilt und die resultierende Liste der Argumente an übergebenecho
. StandardmäßigIFS
ist das Leerzeichen (Leerzeichen, Tabulatoren und Zeilenumbrüche) festgelegt, sodass die Shell Ihre$TEMP
Zeichenfolge in Argumente zerlegt und die neue Zeile nie sieht, da die Shell sie wie ein Leerzeichen als Trennzeichen betrachtet.quelle
xdotool type "$myVar"
funktioniert nicht Es gibt immer noch den Inhalt der Variablen ohne neue Zeilen einFOO="$(echo $VAR)"
; Wie zitieren Sie$VAR
richtig, wenn es bereits in Anführungszeichen steht?"$(echo "$VAR")"
. Ja, es ist seltsam zu analysieren, aber anscheinend einfacher für Muscheln als für uns.Ich bin auf das gleiche Problem gestoßen, ein Zitat wird helfen
ubuntu@host:~/apps$ apps="abc > def" ubuntu@host:~/apps$ echo $apps abc def ubuntu@host:~/apps$ echo "$apps" abc def
quelle