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't
almacenarcommands
envariables
.Use
afunction
en 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 afd
Sin comillas, el shell se reemplaza
$TEMP
por los caracteres que contiene (uno de los cuales es una nueva línea). Luego, antes de invocar, elecho
shell divide esa cadena en varios argumentos usandoInternal Field Separator
(IFS) y pasa la lista de argumentos resultante aecho
. De forma predeterminada,IFS
se establece en espacios en blanco (espacios, tabulaciones y líneas nuevas), por lo que el shell corta la$TEMP
cadena 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$VAR
correctamente 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 def
fuente