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.