For 루프는 변수 벡터를 반복합니다.

For 루프는 변수 벡터를 반복합니다.

for 루프와 Case 문이 있습니다. for 루프에는 다소 큰 요소 목록이 있으며, Case 문은 1차원 배열 또는 벡터를 할당합니다. 이 값은 나중에 for 루프에서 사용됩니다. 다음 코드가 있습니다.

for 루프는 벡터의 첫 번째 값에 대해서만 이 작업을 수행합니다. 예를 들어, f=C인 경우 "C") isotope=(6012 6013);;

for n in $isotope: 6013이 아닌 6012만 반복합니다. f=Ce에서도 같은 문제가 발생합니다. 58136만 루프하고 나머지는 루프하지 않습니다.

# loop through elements
for f in C Ce 
do
cd ${f}

case $f in 
   "Al") isotope=(13027) ;;
   "C")  isotope=(6012 6013);;
   "Ce") isotope=(58136 58138 58140 58142);;
esac

for n in $isotope

do

....# loop through elements
for f in C Ce 
do
cd ${f}

case $f in 
   "Al") isotope=(13027) ;;
   "C")  isotope=(6012 6013);;
   "Ce") isotope=(58136 58138 58140 58142);;
esac

for n in $isotope

do

....

당신의 도움을 주셔서 감사합니다

필스너

답변1

Bash와 ksh에서 인덱스( ) 없이 배열을 참조하는 것은 $foo인덱스( )가 있는 배열을 참조하는 것과 같습니다. 배열의 모든 요소를 ​​가져오는 방법은 특수 값( )을 사용하여 색인을 생성하는 것입니다. 확장이 제대로 작동하려면 따옴표가 필요하다는 점에 유의하세요.0${foo[0]}@"${foo[@]}"

zsh에서 $foo인덱스( ) 없이 확장하면 null이 아닌 모든 값이 제공됩니다.

따라서 Bash 또는 ksh를 사용한다고 가정하면 그 후에는 isotope=(6012 6013)다음이 필요합니다.

for n in "${isotope[@]}"; do
   ...

또한보십시오:

답변2

배열 변수의 잘못된 사용 외에도 동일한 루프 변수( $f및 ) $n의 중첩된 사용 도 확인됩니다.

for f in ...
do
    for n in ...
    do
        for f in ...
        do
            for n in ...
            do

이러한 루프는 작동하지만 각 루프 변수의 범위는 해당 루프로 제한되지 않습니다. 내부 루프 세트가 끝나면 각 루프 변수의 값은 외부 루프에 설정된 값으로 돌아가지 않고 마지막 값 세트에서 유지됩니다.

명확하지 않은 경우 실행해 보고 출력을 확인하세요.

for a in 1 2
do
    echo; echo "Outer: $a"

    for a in y z
    do
        echo "Inner: $a"
    done

    echo "Out of inner loop: $a"
done

관련 정보