Ich bin auf das gleiche Problem gestoßen, ein Zitat wird helfen
[email protected]:~/apps$ apps="abc
> def"
[email protected]:~/apps$ echo $apps
abc def
[email protected]:~/apps$ echo "$apps"
abc
def
Zitat Ihre Variablen. Hier ist der Grund:
$ f="fafafda
> adffd
> adfadf
> adfafd
> afd"
$ echo $f
fafafda adffd adfadf adfafd afd
$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd
Ohne Anführungszeichen ersetzt die Shell $TEMP
mit den darin enthaltenen Zeichen (eines davon ist ein Zeilenumbruch). Dann vor dem Aufruf von echo
Shell teilt diesen String mit Internal Field Separator
in mehrere Argumente auf (IFS) und übergibt diese resultierende Liste von Argumenten an echo
. Standardmäßig ist die IFS
auf Leerzeichen (Leerzeichen, Tabulatoren und Zeilenumbrüche) eingestellt ist, also hackt die Shell Ihre $TEMP
String in Argumente und es bekommt nie den Zeilenumbruch zu sehen, weil die Shell es als Trennzeichen betrachtet, genau wie ein Leerzeichen.