J'ai rencontré le même problème, un devis m'aidera
[email protected]:~/apps$ apps="abc
> def"
[email protected]:~/apps$ echo $apps
abc def
[email protected]:~/apps$ echo "$apps"
abc
def
Citation 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
avec les caractères qu'il contient (dont l'un est une nouvelle ligne). Puis, avant d'invoquer echo
shell divise cette chaîne en plusieurs arguments en utilisant le Internal Field Separator
(IFS) et passe la liste d'arguments résultante à echo
. Par défaut, le IFS
est défini sur des espaces (espaces, tabulations et retours à la ligne), de sorte que le shell coupe votre $TEMP
chaîne en arguments et il ne voit jamais la nouvelle ligne, car le shell le considère comme un séparateur, tout comme un espace.