Variablenproblem (gelöst)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
JaKlaRo
Beiträge: 121
Registriert: 06.03.2008 15:00:00
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Variablenproblem (gelöst)

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

Re: Variablenproblem

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.

Benutzeravatar
JaKlaRo
Beiträge: 121
Registriert: 06.03.2008 15:00:00
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Variablenproblem

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:

Re: Variablenproblem (gelöst)

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.
Meine Whishlist
:wq!

Antworten