Ich habe ein Shell-Skript wie dieses, ich lese eine Datei ein und zähle die Zeilennummer. Ich habe Protokolle wie 1,2,3,4.. usw. aus der Funktion processNumber erhalten
#!/bin/bash
number=0;
processNumber () {
((number++));
echo "$number";
}
grep -E '*' readme.txt | while read -r line ; do
processNumber "$line";
done;
echo "Und schließlich $number";
Aber es protokolliert "Und schließlich 0"
, aber ich erwartete die letzte Zeilennummer. Warum ist das so? Liegt es daran, dass gres einen Datei asynchron liest und echo daher ein Rückruf dazu sein muss?
Oder werden globale Variableänderungen außerhalb der Funktion nicht verfolgt?
Wie kann man das beheben, ohne den grep und Pipe zu ändern?
HINWEIS: Mein Ziel ist es nicht, die Anzahl der Zeilen in der Datei zu finden, sondern dies zu verstehen