Bei den anderen Antworten ist das Problem, wie die Schleife die Ausgabe des ls
Befehls verarbeitet. Wenn eine Zeichenfolge in der for
Schleife verwendet wird, wie Sie sie haben, wird die Zeichenfolge in verschiedene Wörter aufgeteilt (basierend auf dem Wert von, IFS
wie Darren sagt) und unterliegt dem Globbing und dergleichen. Das bedeutet, dass Sie eine Zeichenfolge übergeben, die sowohl durch die Zeile als auch durch die Leerzeichen in der Zeile geteilt wird. Dann wird jedes dieser Wörter der Reihe nach gesetzt pic
.
Kamils Vorschlag löst dieses Problem, weil Sie den Glob direkt auf alle Dateinamen erweitern lassen und dann den gesamten Dateinamen zuweisen pic
.
Diese Wortaufteilung wird jedoch an allen Stellen erfolgen, an denen Sie die pic
Variable später verwenden. Wenn Sie dies nicht möchten, setzen Sie sie in doppelte Anführungszeichen. Z.B,
for pic in *; do printf '%s\n' "$pic" done
um jeden der Namen zu drucken, einen pro Zeile.