I’m using bash shell on Linux. I have this simple script …
#!/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
However, when I run this script
./temp.sh
all the output is printed without the carriage returns/new lines. Not sure if its the way I’m storing the output to $TEMP, or the echo command itself.
How do I store the output of the command to a variable and preserve the line breaks/carriage returns?
Quote your variables. Here is it why:
Without quotes, the shell replaces
$TEMP
with the characters it contains (one of which is a newline). Then, before invokingecho
shell splits that string into multiple arguments using theInternal Field Separator
(IFS), and passes that resulting list of arguments toecho
. By default, theIFS
is set to whitespace (spaces, tabs, and newlines), so the shell chops your$TEMP
string into arguments and it never gets to see the newline, because the shell considers it a separator, just like a space.I have ran into the same problem, a quote will help