Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 获取嵌套循环中的迭代编号_Arrays_Bash_Loops_Unix_For Loop - Fatal编程技术网

Arrays 获取嵌套循环中的迭代编号

Arrays 获取嵌套循环中的迭代编号,arrays,bash,loops,unix,for-loop,Arrays,Bash,Loops,Unix,For Loop,对于使用两个或多个数组的嵌套循环,例如 A=(0.1 0.2) B=(2 4 6) AB=$((${#A[@]}*${#B[@]})) # total number of iterations (length of A * length of B) for a in ${A[*]}; do for b in ${B[*]}; do $(($a+$b)) # task using each combination of A and B echo ? # show numb

对于使用两个或多个数组的嵌套循环,例如

A=(0.1 0.2)
B=(2 4 6)

AB=$((${#A[@]}*${#B[@]})) # total number of iterations (length of A * length of B)

for a in ${A[*]}; do
  for b in ${B[*]}; do

    $(($a+$b)) # task using each combination of A and B
    echo ? # show number of the iteration (i.e. 1 to length of AB)

  done
done

获取迭代次数的最佳方法是什么,如上所示,使用
echo

您可以使用一个在内部循环中递增的简单计数器:

i=0
for a in "${A[@]}"; do
  for b in "${B[@]}"; do
    ((i++))
    printf "Iteration: $i\n"
    : your code
  done
done
<如果所有的逻辑都在最内层循环中,如果我们认为最内层循环的执行是一次迭代,那么这将是有意义的。< /P>

请注意,在数组引用周围需要双引号,以防止分词和全局搜索。此外,我认为您需要
array[@]
而不是
array[*]
,只要您希望每个元素都是单独的,而不是所有元素的串联版本。

根据给出的示例和@codeforester建议的方法,这对我来说是有效的(脚本开头附近包含
set-e


在本例中,不带双引号的
array[*]
生成了所需的结果,分别使用循环中的每个元素生成
A
B
值的唯一组合,同时在嵌套循环中查找每个迭代编号。

谢谢。此方法在本例中效果良好。但是,如果我使用
set-e
(出错时退出)启动脚本,则不会打印任何内容。虽然显然不重要,但这是否表明此代码存在缺陷?@user3743235如果从
i=1开始并使用
(++i))
,则它与
set-e
一起工作。为什么我不清楚。虽然这可能适用于您的案例,但@codeforester已经指出了几个问题。
i=1
for a in ${A[*]}; do
  for b in ${B[*]}; do
    I=$((i++))
    echo "Iteration: $I"
    echo "Combination: $a $b" # show combination of A and B elements
    # task code
  done
done