Estoy usando bash shell en Linux. Tengo este sencillo guión ...
#!/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
Sin embargo, cuando ejecuto este script
./temp.sh
toda la salida se imprime sin los retornos de carro / nuevas líneas. No estoy seguro de si es la forma en que estoy almacenando la salida en $ TEMP, o el comando echo en sí.
¿Cómo almaceno la salida del comando en una variable y conservo los saltos de línea / retornos de carro?
linux
bash
shell
line-breaks
Dave
fuente
fuente

don'talmacenarcommandsenvariables.Useafunctionen su lugarRespuestas:
Cite sus variables. He aquí por qué:
$ f="fafafda > adffd > adfadf > adfafd > afd"$ echo $f fafafda adffd adfadf adfafd afd$ echo "$f" fafafda adffd adfadf adfafd afdSin comillas, el shell se reemplaza
$TEMPpor los caracteres que contiene (uno de los cuales es una nueva línea). Luego, antes de invocar, elechoshell divide esa cadena en varios argumentos usandoInternal Field Separator(IFS) y pasa la lista de argumentos resultante aecho. De forma predeterminada,IFSse establece en espacios en blanco (espacios, tabulaciones y líneas nuevas), por lo que el shell corta la$TEMPcadena en argumentos y nunca llega a ver la línea nueva, porque el shell lo considera un separador, como un espacio.fuente
xdotool type "$myVar"no funciona. todavía está escribiendo el contenido de la variable sin nuevas líneasFOO="$(echo $VAR)"; ¿Cómo se cita$VARcorrectamente cuando ya está entre comillas?"$(echo "$VAR")". Sí, es extraño analizarlo, pero aparentemente más fácil para los shells que para nosotros.Me he encontrado con el mismo problema, una cotización ayudará
ubuntu@host:~/apps$ apps="abc > def" ubuntu@host:~/apps$ echo $apps abc def ubuntu@host:~/apps$ echo "$apps" abc deffuente