robert
08-04-2017, 01:19
edit: Sorry, im Titel vergessen. Es geht um ein Bash Script.
Hallo,
obwohl ich mich schon sehr, sehr lange mit Bash Scripten auseinander setze, ist mir noch nie aufgefallen, dass es eine Einschränkung bei globalen Variablen in Schleifen gibt. Oder habe ich irgend etwas verpasst.
Ein Beispiel:
#!/bin/bash
SDir="/irgend/ein/verzeichnis"
FoundCound=0
find "$SDir" -type f -iname "*.txt" | while read -r FFile
do
IsText=$(grep -i "test" "$FFile")
[ -n "$IsText" ] && FoundCount=$((FoundCount+1))
echo -n -e "\t==> $FoundCount\r"
done
echo "Text gefunden in $FoundCount dateien."
So und genau da klappt es nicht (mehr?). FoundCount wird innerhalb der Schleife sauber hoch gezählt, wenn etwas gefunden wird. Aber nach der Schleife ist es immer 0.
Übersehe ich irgend etwas, oder warum ist der Wert nach der Schleife immer 0? Die Variable ist doch schon vor der Schleife definiert und zählt auch innerhalb der Schleife hoch.
Gruß
Robert
Hallo,
obwohl ich mich schon sehr, sehr lange mit Bash Scripten auseinander setze, ist mir noch nie aufgefallen, dass es eine Einschränkung bei globalen Variablen in Schleifen gibt. Oder habe ich irgend etwas verpasst.
Ein Beispiel:
#!/bin/bash
SDir="/irgend/ein/verzeichnis"
FoundCound=0
find "$SDir" -type f -iname "*.txt" | while read -r FFile
do
IsText=$(grep -i "test" "$FFile")
[ -n "$IsText" ] && FoundCount=$((FoundCount+1))
echo -n -e "\t==> $FoundCount\r"
done
echo "Text gefunden in $FoundCount dateien."
So und genau da klappt es nicht (mehr?). FoundCount wird innerhalb der Schleife sauber hoch gezählt, wenn etwas gefunden wird. Aber nach der Schleife ist es immer 0.
Übersehe ich irgend etwas, oder warum ist der Wert nach der Schleife immer 0? Die Variable ist doch schon vor der Schleife definiert und zählt auch innerhalb der Schleife hoch.
Gruß
Robert