多数の文字列を含む配列があり、各文字列に対して何らかの作業を行いたいと考えています。単純な 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 がこのように動作するのはなぜですか? また、必要なことをどのように達成できますか? (わかりやすさや書式設定に問題がある場合は、申し訳ありません)