Ist die Zählervariable in For-Schleifen in Bash lokal oder global?

Ist die Zählervariable in For-Schleifen in Bash lokal oder global?

im Idiom

for i in $directories; do
  # ...
done

... ist die Variable $ilokal oder global?

Und was, wenn es zufällig eine globale Variable mit demselben Namen gibt? Funktioniert Bash mit der globalen Variable oder mit der im for ... in ...Header?

Antwort1

forführt keinen eigenen Variablenbereich ein, also iist es das, was es beim Eintritt in die forSchleife ist. Dies könnte global sein oderlokal für die Funktion, die es als lokal deklariert hat, oder auchglobal, aber in einer Unterschale.

Beim Verlassen der forSchleife hat die Variable den letzten Wert, den sie in der Schleife hatte, sofern sie nicht in einer Unter-Shell gelandet ist. Wie stark sich das auswirkt, hängt vom Gültigkeitsbereich der Variable ab. Daher ist es eine gute Idee, Schleifenvariablen als lokale Variablen innerhalb von Funktionen zu deklarieren (sofern der Nebeneffekt nicht erwünscht ist).

verwandte Informationen