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