Come posso preservare le interruzioni di riga durante la memorizzazione di un output di comando in una variabile in bash?

Sto usando bash shell su Linux. Ho questo semplice 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 

Tuttavia, quando eseguo questo script

 ./temp.sh 

tutto l’output viene stampato senza le ritorni a capo / nuove linee. Non sono sicuro se è il modo in cui sto memorizzando l’output in $ TEMP, o il comando echo stesso.

Come posso archiviare l’output del comando in una variabile e conservare le interruzioni di riga / i ritorni a capo?

Cita le tue variabili. Ecco perché:

 $ f="fafafda > adffd > adfadf > adfafd > afd" 

 $ echo $f fafafda adffd adfadf adfafd afd 

 $ echo "$f" fafafda adffd adfadf adfafd afd 

Senza virgolette, la shell sostituisce $TEMP con i caratteri che contiene (uno dei quali è una nuova riga). Quindi, prima di richiamare la shell di echo , suddividere quella stringa in più argomenti utilizzando il Internal Field Separator (IFS) e passa l’elenco risultante di argomenti da echo . Per impostazione predefinita, l’ IFS è impostato su bianco (spazi, tabulazioni e linee nuove), quindi la shell riduce la stringa $TEMP in argomenti e non viene mai visualizzata la nuova riga, poiché la shell considera un separatore, proprio come uno spazio.