Sieht aus, als hätte Google die Antwort auf diese Frage gefunden.
Setzen Sie diesen magischen Zauber vor die for
Aussage:
shopt -s nullglob
Das folgende Bash-Snippet funktioniert gut, wenn sich tatsächlich *.txt
Dateien im Verzeichnis befinden.
for txt in *.txt do echo "loading data from $txt" done
Wenn nicht, *.txt
fällt das Literal als $ txt (nicht gut) in die Schleife.
Wie ändere ich diesen Code, damit *.txt
der do ... done
Block übersprungen wird, wenn keine Dateien vorhanden sind ?
Sieht aus, als hätte Google die Antwort auf diese Frage gefunden.
Setzen Sie diesen magischen Zauber vor die for
Aussage:
shopt -s nullglob
Die Nullglob-Option (@ kfmfe04s Antwort) ist am besten, wenn Sie bash (keine Brand-X-Shell) verwenden und sich keine Gedanken darüber machen müssen, dass Nullglob etwas anderes ändert oder beschädigt. Ansonsten können Sie diese (etwas unordentlicher) Option verwenden:
for txt in *.txt do [ -e "$txt" ] || continue echo "loading data from $txt" done
Dies überspringt automatisch Dateien, die nicht vorhanden sind (hauptsächlich "* .txt", wenn keine Übereinstimmungen vorhanden waren, aber möglicherweise auch Dateien, die zwischen dem for
Generieren der Liste und dem Zeitpunkt, zu dem die Schleife zu ihnen kam, gelöscht wurden ...)