bash の for ループでは、カウンター変数はローカルですか、それともグローバルですか?

bash の for ループでは、カウンター変数はローカルですか、それともグローバルですか?

慣用句では

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

...変数は$iローカルですか、それともグローバルですか?

同じ名前のグローバル変数がある場合はどうなるでしょうか。bash はグローバル変数で動作しますか、それともヘッダーの変数で動作しますかfor ... in ...?

答え1

for独自の変数スコープを導入しないので、ループiに入る時点でのスコープのままですfor。これはグローバルでも、ローカルとして宣言された関数に対してローカル、 あるいはグローバルだがサブシェル内

ループを終了するとfor、変数はサブシェル内で終了しない限り、ループ内で最後に保持していた値を持ちます。影響の程度は変数のスコープによって異なるため、ループ変数を関数内でローカルとして宣言することをお勧めします (副作用が必要な場合を除く)。

関連情報