2012-05-27 5 views
0

배열에 문자열 수가 많아서 각 문자열에 대해 몇 가지 작업을 수행하려고합니다. 나는 간단한 루프가 작동 할 것이라고 생각 했겠지만 심각한 문제를 일으키고있다. :bash 배열을 반복 할 때 bash 배열을 어떻게 동작시킬 수 있습니까?

for list in $valarr 
do 

    for word in ${valarr[j]} 
    do 
    #echo word: $word 
    if [ $i -ge $f ] && [ $i -le $t ]; then 
     echo -e -n "$word\t" 
    fi 
    i=`expr $i + 1` 
    done 
    echo $j ${#valarr[@]} 
    i=0 
    j=`expr $j + 1` 
done 

위에서 알 수 있듯이 두 개의 루프가있다. 내부에 중첩 된 하나가 필요한 작업을 수행하지만 잘 작동합니다. 그러나 for-loop 외부 요소는 요소의 수는 이며 첫 번째 요소 (문자열)의 단어 수는입니다.

for each string in an array: 
    for each word in the string: 
     do some work 
    done 
done 

왜 bash는이 같은 행동 않습니다 어떻게 내가해야 할 일을 수행 할 수 있습니다 구조적으로 내가 정말하고 싶은 모든이 같은 것입니다? (사과, 도중에, 또는 선명도 포맷 어떤 문제) 이와 같은 배열을

답변

1

하면 루프 :

for var in "${valarr[@]}" 

에서 [@] 중요하다; 베어 $arrayName${arrayName[0]}과 동일합니다. 그래서 루프가 첫 번째 요소의 단어를 반복합니다.

+0

감사합니다. 힙, 마크. 지금은 훨씬 잘 작동합니다. :) – user1419715

관련 문제