2012-04-26 104 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