在迭代它们时,如何使bash数组表现出来呢?

时间:2012-05-27 03:15:07

标签: for-loop

我有一个包含许多字符串的数组,并希望对每个字符串做一些工作。我曾经想过一个简单的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表现得像这样,我怎样才能完成我需要做的事情? (道歉,顺便说一下,对于清晰度或格式化方面的任何问题)

1 个答案:

答案 0 :(得分:1)

你循环遍历这样的数组:

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

[@]很重要;裸$arrayName${arrayName[0]}相同。这就是你的循环循环遍历第一个元素中的单词的原因。