0

多数の文字列を含む配列があり、各文字列に対して何らかの作業を行いたいと考えています。単純な for ループが機能すると思っていたのですが、これは深刻な問題を引き起こしています。

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

ご覧のとおり、2 つのループがあります。内部にネストされたものは、必要な作業を行います (そして正常に動作します) が、外側の for ループは、それが持つ要素の数が最初の要素 (string) 内の単語の数であると考えています。構造的に私が本当にやりたいことは、次のようなものです。

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

bash がこのように動作するのはなぜですか? また、必要なことをどのように達成できますか? (わかりやすさや書式設定に問題がある場合は、申し訳ありません)

4

1 に答える 1

1

次のように配列をループします。

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

[@] は重要です。ベア$arrayNameは と同じ${arrayName[0]}です。これが、ループが最初の要素の単語をループしている理由です。

于 2012-05-27T04:06:33.787 に答える