Używam powłoki bash w systemie Linux. Mam ten prosty skrypt…
#!/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
Jednak po uruchomieniu tego skryptu
./temp.sh
całe wyjście jest drukowane bez powrotu karetki / nowych wierszy. Nie jestem pewien, czy to sposób, w jaki przechowuję dane wyjściowe do $ TEMP, czy też samo polecenie echo.
Jak zapisać dane wyjściowe polecenia w zmiennej i zachować podziały wierszy / powroty karetki?
linux
bash
shell
line-breaks
Dave
źródło
źródło
don't
przechowywaćcommands
wvariables
.Use
afunction
zamiast tegoOdpowiedzi:
Cytuj swoje zmienne. Oto dlaczego:
$ f="fafafda > adffd > adfadf > adfafd > afd"
$ echo $f fafafda adffd adfadf adfafd afd
$ echo "$f" fafafda adffd adfadf adfafd afd
Bez cudzysłowów powłoka zastępuje zawarte
$TEMP
w niej znaki (jednym z nich jest nowa linia). Następnie przed wywołaniemecho
powłoki dzieli ten ciąg na wiele argumentów za pomocąInternal Field Separator
(IFS) i przekazuje wynikową listę argumentów doecho
. DomyślnieIFS
jest ustawiony na białe spacje (spacje, tabulatory i znaki nowej linii), więc powłoka tnie$TEMP
łańcuch na argumenty i nigdy nie widzi znaku nowej linii, ponieważ powłoka uważa go za separator, tak jak spację.źródło
xdotool type "$myVar"
nie działa. nadal wpisuje zawartość zmiennej bez nowych liniiFOO="$(echo $VAR)"
; jak$VAR
prawidłowo cytujesz, gdy jest już w cudzysłowie?"$(echo "$VAR")"
. Tak, to dziwne analizowanie, ale najwyraźniej łatwiejsze dla muszli niż dla nas.Napotkałem ten sam problem, cytat pomoże
ubuntu@host:~/apps$ apps="abc > def" ubuntu@host:~/apps$ echo $apps abc def ubuntu@host:~/apps$ echo "$apps" abc def
źródło