J'utilise bash Shell sous Linux. J'ai ce script simple…
#!/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
Cependant, quand je lance ce script
./temp.sh
toute la sortie est imprimée sans les retours chariot/nouvelles lignes. Je ne sais pas si c’est comme cela que j’enregistre la sortie dans $ TEMP ou la commande echo elle-même.
Comment enregistrer la sortie de la commande dans une variable et conserver les sauts de ligne/retours à la ligne?
Citer vos variables. Voici pourquoi:
$ f="fafafda
> adffd
> adfadf
> adfafd
> afd"
$ echo $f
fafafda adffd adfadf adfafd afd
$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd
Sans guillemets, le shell remplace $TEMP
par les caractères qu'il contient (l'un d'entre eux est une nouvelle ligne). Ensuite, avant d'appeler echo
, Shell divise cette chaîne en plusieurs arguments à l'aide de Internal Field Separator
(IFS), puis transmet la liste d'arguments résultante à echo
. Par défaut, la variable IFS
est définie sur un espace (espaces, tabulations et nouvelles lignes). Le shell divise votre chaîne $TEMP
en arguments et ne peut jamais voir la nouvelle ligne, car le shell la considère comme un séparateur, comme un espace.
J'ai rencontré le même problème, une citation aidera
ubuntu@Host:~/apps$ apps="abc
> def"
ubuntu@Host:~/apps$ echo $apps
abc def
ubuntu@Host:~/apps$ echo "$apps"
abc
def