我有一个包含许多字符串的数组,并希望对每个字符串做一些工作。我曾经想过一个简单的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
如你所见,我有两个循环。嵌套在里面的那个做我需要完成的工作(并且工作正常)但是外部for循环认为它拥有的元素数量是第一个元素(字符串)中的单词数。在结构上,我真正想做的就是这样:
for each string in an array:
for each word in the string:
do some work
done
done
为什么bash表现得像这样,我怎样才能完成我需要做的事情? (道歉,顺便说一下,对于清晰度或格式化方面的任何问题)
答案 0 :(得分:1)
你循环遍历这样的数组:
for var in "${valarr[@]}"
[@]很重要;裸$arrayName
与${arrayName[0]}
相同。这就是你的循环循环遍历第一个元素中的单词的原因。