중첩된 for 루프의 변수를 지역 변수로 설정할 수 있습니까?

중첩된 for 루프의 변수를 지역 변수로 설정할 수 있습니까?
#!/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

산출:

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

중첩된 for 루프 로컬 변수 내에 변수를 만드는 것이 가능합니까?

답변1

중첩된 for 루프 로컬 변수 내에 변수를 만드는 것이 가능합니까?

예, 하지만 하나의 기능만 사용합니다.

내장 기능은 함수 내부에만 존재할 수 있으므로 변수의 범위를 전역에서 로컬로 변경하는 local함수를 제공해야 합니다 .i

#!/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

답변2

서브셸에서 내부 변수를 실행하면 외부 변수에 영향을 미치지 않습니다.

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

결과 :

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

관련 정보