【问题标题】:Shell Scripting - Array iteration not working correctly - Nested for loopShell 脚本 - 数组迭代无法正常工作 - 嵌套 for 循环
【发布时间】:2019-04-04 18:12:34
【问题描述】:

所以,我有两个数组:

arr1=("A" "C" "E")
arr2=("B" "D" "F")

我有这样的嵌套循环:

 for i in $(seq 1 $numberOfYears); 
    do
        echo "$i"
        for j in "${arr1[@]}";
            do
                echo ${arr1[j]} <---Keeps printing "A" 
                echo ${arr2[j]} <---Keeps printing "B" 
            done
    done

编程 shell 脚本的新手。什么会导致内部 for 循环正确地遍历 array1 当您像这样引用元素时:$j 但不是这样的${arr1[j]}${arr2[j]} ..?在所有的 我的阅读/搜索,这应该正确地遍历两个数组。

我的预期结果:

预期

 1ABCDEF
 2ABCDEF
 3ABCDEF

实际

 1ABABAB
 2ABABAB
 3ABABAB

如果我将${arr1[j]} 更改为$j,它可以正常工作,但我还需要获取 arr2 的元素,所以我必须像${arr2[j]} 一样获取它。

【问题讨论】:

  • 您可能正在寻找for j in "${!arr1[@]}"...
  • 也许关联数组会更好用? declare -A arr=([A]=B [C]=D [E]=F); for k in "${!arr[@]}"; do echo $k ${arr[$k]} ; done.

标签: bash shell loops nested


【解决方案1】:

您正在循环遍历数组的

如果需要,您可以使用"${!arr1[@]}"(添加!)循环键:

for i in $(seq 1 $numberOfYears); 
do
    echo "$i"
    for j in "${!arr1[@]}";
    do
        echo ${arr1[j]}
        echo ${arr2[j]}
    done
done

否则,您正在扩展${arr1["A"]} 之类的参数,并且由于未定义这些键,因此您将获得数组的第一个元素。

顺便说一句,您还可以使用不同样式的循环来迭代数字键:

for (( i = 0; i <= numberOfYears; ++i ))
do
  echo "$i"
  for (( j = 0; j < ${#arr1[@]}; ++j ))
  do
    echo "${arr1[j]}"
    echo "${arr2[j]}"
  done
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2021-08-21
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    相关资源
    最近更新 更多