2012-04-26 63 views
4

这是一段时间,因为我已经完成了激烈的bash脚本编写,并且我忘记了在for循环中执行多个条件的语法。for循环与Bash脚本中的多个条件

在C,我会做:

for(var i=0,j=0; i<arrayOne.length && j<arrayTwo.length; i++,j++){ 
    // Do stuff 
} 

我一直在google搜索了一会儿,只找到嵌套语法涉及的for循环,而不是多个条件,以一个for循环。

回答

8

听起来你谈论算术for循环

for ((i = j = 0; i < ${#arrayOne[@]} && j < ${#arrayTwo[@]}; i++, j++)); do 
    # Do stuff 
done 

哪些假设ij是未设置或为零大约相当于:

while ((i++ < ${#arrayOne[@]} && j++ < ${#arrayTwo[@]})); do ... 

及略微更便携,只要你不关心的i/j后的值循环。

3

没有很大的区别,如果你使用C进行比较

for ((c=1,d=1; c<=5 && d<=6; c++,d+=2)) 
do 
     echo "$c : $d" 
done 
+0

那么这是C风格的语法,我还没有尝试过。我对 更感兴趣,因为我在$ things中;做 .. 完成 – Miles 2012-04-26 22:24:27

+0

如果你只有一个循环,你可以这样做: 'x [0] =“test 1”; x [1] =“测试2”;因为我在“$ {x [@]}”;做echo $ i;完成'' – mata 2012-04-26 22:31:27

+1

'因为'迭代参数。它与“条件”没有任何关系,不能在没有嵌套的情况下进行c样式循环。 '为我在“$ {arrayOne [@]}”“$ {arrayTwo [@]}”; do'会依次迭代每个数组的元素。 – ormaaj 2012-04-26 22:35:54