Re: bash
Roland M. Kruggel:
>ich muss über Dateien die im /tmp liegen iterieren.
>ein
> FILES=`ls /tmp/*.name.ext`
>funktioniert eigentlich ganz gut. So lange mindestens ein file
>vorhanden ist. Sonst steigt ls mit einer feglermeldung aus.
Achtung: Das funktioniert nur, wenn Dateinamen keine
White-Space-Zeichen enthalten. Und das kannst du in /tmp, wo
jeder Dateien erzeugen kann, nicht ausschließen!
Sauber geht's so:
Annahme: Der Kommandointerpreter ist bourne-shell- oder
posix-shell-kompatibel:
# Liste der positional Parameters leeren:
set ''; shift
for file in /tmp/*.name.ext
do
# stelle mit sicher, dass Datei wirklich vorhanden:
test -e "$file" && set -- ${1+"$@"} "$file"
done
# Jetzt sind die gefundenen Namen in $@, der Liste der positional
# Parameters und die Anzahl in $#
Warum ist es innerhalb der Schleife nötig, zu überprüfen, ob der
"gefundene" Name wirklich vorhanden ist?
Antwort: Wenn das Bourne-Shell zu einem Dateinamens-Muster in
einer Parameterliste oder in einem For-Schleifen-Kopf keine Datei
findet, wird das Muster nicht aus der Liste entfernt sondern
unverändert in die Liste gesetzt, d.h. wenn keine Datei gefunden
wurde, enthält die Liste das eine Wort '/tmp/*.name.ext'
--
Bitte in die Adressierung auch meinen|Please put my full name also into
Vor- u. Nachnamen stellen z.B. |the recipient like
Friedhelm Waitzmann <xxx@example>, (Friedhelm Waitzmann) xxx@example,
"Waitzmann, Friedhelm" <xxx@example>
Reply to:
- References:
- bash
- From: "Roland M. Kruggel" <rk-liste@gmx.de>