[unix] 중첩 된 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 루프 내부에서 변수를 로컬로 만들 수 있습니까?



답변

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

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


답변

중첩 된 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


답변