Die Zeilenumbrüche befinden sich in der Variablen. LS=$(ls -1)
Setzt die Variable LS
auf die Ausgabe von ls -1
(die ls
übrigens dieselbe Ausgabe erzeugt , außer wenn die Ausgabe an ein Terminal geht) abzüglich nachfolgender Zeilenumbrüche.
Das Problem ist, dass Sie die Zeilenumbrüche entfernen, wenn Sie den Wert ausdrucken. In einem Shell-Skript $LS
bedeutet dies nicht "den Wert der Variablen LS
", sondern "den Wert von nehmen LS
, ihn in Wörter aufteilen IFS
und jedes Wort als Glob-Muster interpretieren". Um den Wert von zu erhalten LS
, müssen Sie schreiben "$LS"
oder allgemeiner $LS
zwischen doppelte Anführungszeichen setzen.
echo "$LS"
Gibt den Wert von aus LS
, außer in einigen Shells, die Backslash-Zeichen interpretieren, und mit Ausnahme einiger Werte, die mit beginnen -
.
printf "$LS"
Gibt den Wert von LS
aus, solange er kein Prozent- oder Backslash-Zeichen enthält und (bei den meisten Implementierungen) nicht mit beginnt -
.
LS
Verwenden Sie, um den Wert von genau zu drucken printf %s "$LS"
. Wenn Sie am Ende einen Zeilenumbruch wünschen, verwenden Sie printf '%s\n' "$LS"
.
Beachten Sie, dass $(ls)
dies im Allgemeinen nicht die Liste der Dateien im aktuellen Verzeichnis ist. Dies funktioniert nur, wenn Sie ausreichend zahme Dateinamen haben. Um die Liste der Dateinamen (außer Punktdateien) abzurufen, müssen Sie einen Platzhalter verwenden : *
. Das Ergebnis ist eine Liste von Zeichenfolgen, keine Zeichenfolge. Sie können sie daher keiner Zeichenfolgenvariablen zuweisen. Sie können eine Array-Variable files=(*)
in Shells verwenden, die sie unterstützen (ksh93, bash, zsh).
Weitere Informationen finden Sie unter Warum verschluckt sich mein Shell-Skript an Leerzeichen oder anderen Sonderzeichen?
printf "%s\n" $LS
würde dies der Fall sein .