[shell script] break, continue


break:breakを読むとすぐにbreakが属する重複文を終了します.continue:continueの読み取りから、次のコードをスキップして次の繰り返しを行います.
例えば、0から10に増加したインデックスのうち、インデックスが5の場合、breakおよびcontinueにそれぞれ書き込まれる場合、差は非常に顕著である.
$ cat test1
#!/bin/bash
for (( i = 0; i <= 10; i++ ))
do
        if (( $i == 5 ))
        then
                break
        fi
        echo "i -> $i"
done

$ ./test1
i -> 0
i -> 1
i -> 2
i -> 3
i -> 4
以上のようにi = 5の場合、breakに遭遇した場合は、forの扉を閉める.4にのみ出力されます.
逆にbreak位でcontinueを使うとどうなるでしょうか?
$ cat test1
#!/bin/bash
for (( i = 0; i <= 10; i++ ))
do
        if (( $i == 5 ))
        then
                continue
        fi
        echo "i -> $i"
done

$ ./test1
i -> 0
i -> 1
i -> 2
i -> 3
i -> 4
i -> 6
i -> 7
i -> 8
i -> 9
i -> 10
continueが使用される場合、i = 5においてcontinueが検索され、次にコードがスキップされ、次の反復が行われる.
したがって、5を除き、残りの結果は出力される.

冗長for文から外部ループを終了またはスキップ

breakは、breakに属する重複文を終了する.j = 2の場合、breakに遭遇すると、jを迂回したforのドアは完全に閉じられ、その後はj = 3, 4は実行されない.
外転iforゲートには全く影響しません.
$ cat test1
#!/bin/bash
for (( i = 1; i <= 4; i++ ))
do
        echo "i -> $i"
        for (( j = 1; j <= 4; j++ ))
        do
                if (( $j == 2 ))
                then
                        break
                fi
                echo "  j -> $j"
        done
done

$ ./test1
i -> 1
        j -> 1
i -> 2
        j -> 1
i -> 3
        j -> 1
i -> 4
        j -> 1
しかし、ここでは、iの周りを回るforのドアを閉じる方法があります.
break n
nのデフォルト値は1で、現在属しているループを示します.
数字を1つ増やすたびに、바깥쪽ループを指します.break 2が与えられると、外部iを回転させるループは終了する.
$ cat test1
#!/bin/bash
for (( i = 1; i <= 4; i++ ))
do
        echo "i -> $i"
        for (( j = 1; j <= 4; j++ ))
        do
                if (( $j == 2 ))
                then
                        break 2
                fi
                echo "  j -> $j"
        done
done

$ ./test1
i -> 1
        j -> 1
continueは、continueが属する重複文の内容から次のコードをスキップします.continueで、j = 2と遭遇した場合は、continueを回転するj文で次の内容を省略し、次の反復が表示されます.
外転forcontinueゲートには全く影響しません.
$ cat test1
#!/bin/bash
for (( i = 1; i <= 4; i++ ))
do
        echo "i -> $i"
        for (( j = 1; j <= 4; j++ ))
        do
                if (( $j == 2 ))
                then
                        continue
                fi
                echo "  j -> $j"
        done
done

$ ./test1
i -> 1
        j -> 1
        j -> 3
        j -> 4
i -> 2
        j -> 1
        j -> 3
        j -> 4
i -> 3
        j -> 1
        j -> 3
        j -> 4
i -> 4
        j -> 1
        j -> 3
        j -> 4
同様に、iは、パラメータによって外輪の内容をスキップすることもできる.
$ cat test1
#!/bin/bash
for (( i = 1; i <= 4; i++ ))
do
        echo "i -> $i"
        for (( j = 1; j <= 4; j++ ))
        do
                if (( $j == 2 ))
                then
                        continue 2
                fi
                echo "  j -> $j"
        done
done

$ ./test1
i -> 1
        j -> 1
i -> 2
        j -> 1
i -> 3
        j -> 1
i -> 4
        j -> 1