2016-07-11 2 views
0

Ich habe über ein Dutzend Lösungsbeiträge zu diesem Thema gelesen, doch mein Problem bleibt bestehen. Warum kann ich die HITS oder MISSES Variable in meinem Code nicht erhöhen? Ich kann einfach nicht den Fehler sehen:Eine Variable in bash kann nicht erhöht werden. Umfang Fehler? Syntax?

MISSES=0 
HITS=0 
for fName in *.dat; do (
    if grep -q "hit" "$fName"; then 
     echo "$fName hit"; 
     ((HITS++)); 
     else 
     echo "$fName miss"; 
     ((MISSES++)); 
     fi; 
    );done 

Ich habe gerade angefangen, mich mit bash vertraut gemacht, damit ich weiß, bisher nur sehr wenig.

Antwort

2

(...) Der Inhalt wird in einer Subshell ausgeführt. Dies bedeutet, dass Änderungen an Variablen in der Subshell nach dem Beenden der Subshell nicht sichtbar sind. Sie können sie weglassen:

for fName in *.dat; do 
    if grep -q hit "$fName"; then 
    echo "$fName hit" 
    ((HITS++)) 
    else 
    echo "$fName miss" 
    ((MISSES++)) 
    fi 
done 
+0

Großartig, danke. Du hast in 2 Minuten geantwortet, was ich ungefähr eine Stunde lang herausgefunden habe. – OnAcc

1

Vielleicht könnten Sie versuchen, so etwas wie: HITS = $ (($ HITS + 1));

+0

Das wird das gleiche Problem haben ... – zondo

Verwandte Themen