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

如您所见,我有两个循环。嵌套在里面的那个完成了我需要完成的工作(并且工作正常),但外部 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 回答