Est-il possible de rendre la variable à l'intérieur nestede pour la boucle locale

#!/bin/bash for i in 1 2 3 4 do # { # local i ##gives error local: can only be used in a function for i in 1 2 3 do echo "inner loop ----- $i" (( i++ )) done # } echo $i done 

dehors :

 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 4 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 4 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 4 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 4 

Est-il possible de rendre la variable à l'intérieur nestede pour la boucle locale.

Si vous exécutez la variable interne dans un sous-shell, cela n'affectera pas la variable externe:

 for i in 1 2 3 4; do ( for i in 1 2 3; do echo "inner loop ----- $i" (( i++ )) done ) echo $i done 

Ce qui entraîne:

 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 1 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 2 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 3 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 4 

Est-il possible de rendre la variable à l'intérieur nestede pour la boucle locale.

Oui, mais seulement en utilisant une fonction.

Comme le local embedded ne peut exister qu'à l'intérieur d'une fonction, nous devons fournir une fonction pour que la variable i change la scope du global au local:

 #!/bin/bash internalfunction () { local i ### Works as is inside a function for i in 1 2 3; do echo "inner loop ----- $i" (( i++ )) done } for i in 1 2 3 4; do echo $i internalfunction done 

 $ ./script.sh 1 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 2 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 3 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3 4 inner loop ----- 1 inner loop ----- 2 inner loop ----- 3