Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
JaKlaRo
- Beiträge: 121
- Registriert: 06.03.2008 15:00:00
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Beitrag
von JaKlaRo » 13.10.2009 21:31:37
Hallo
ich habe das folgende Skript vereinfacht, daher nicht über den Sinn nachdenken! Die Konstruktion "find ... while" nutze ich, um Dateinamen mit Leerzeichen sauber verarbeiten zu können. Ich brauche jedoch die Variable "Zahl" nach der Schleife weiterhin, aber sie hat immer den Wert 0, egal was ich auch versuche.
Code: Alles auswählen
#! /bin/bash
Zahl=0
i=
find ~/Musik/ -name *.mp3 | \
while read i; do
let Zahl=$Zahl+1
echo $Zahl
done
echo "$i"
echo "Zahl $Zahl"
Gruß
JaKlaRo
Zuletzt geändert von
JaKlaRo am 13.10.2009 22:49:50, insgesamt 1-mal geändert.
-
FitzeFatze
- Beiträge: 834
- Registriert: 06.07.2004 10:08:21
Beitrag
von FitzeFatze » 13.10.2009 22:02:18
m.e. (ohne shellscripten zu können) definierst du in der Schleife eine 2. Variable mit dem Namen "Zahl".
Nennt sich shadowing.
-
JaKlaRo
- Beiträge: 121
- Registriert: 06.03.2008 15:00:00
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Beitrag
von JaKlaRo » 13.10.2009 22:14:01
Habe selbst eine Lösung gefunden:
Code: Alles auswählen
#! /bin/bash
Zahl=0
i=
find ~/Musik/ -name *.mp3 > /tmp/MUSIK
while read i; do
let Zahl=$Zahl+1
echo $Zahl
done < /tmp/MUSIK
echo "$i"
echo "Zahl $Zahl"
Erklärung: Durch die Pipe wird ein eigener Prozess gestartet, der nach dem durchlaufen der Schleife wieder gelöscht wird und damit auch die Variablen.
-
chrisbra
- Beiträge: 122
- Registriert: 19.10.2005 09:36:09
- Wohnort: Sachsen-Anhalt
-
Kontaktdaten:
Beitrag
von chrisbra » 15.10.2009 14:30:36
IIRC, sollte das hier funktionieren:
Code: Alles auswählen
while read i; do let zahl=$zahl+1; echo $i; done < <(find . -type f)
Da wird keine Subshell gestartet, und daher ist $zahl hinterher noch verfügbar.