break コマンド

シェルスクリプト内の for、while、until、または select ループから抜け出すためのコマンドです。

概要

break コマンドはシェルスクリプト内で、ループが通常の完了を迎える前に抜け出すために使用されます。実行されると、最も内側のループをすぐに終了し、終了したループの次のコマンドから実行を継続します。オプションの数値引数を使用すると、複数のネストされたループから抜け出すことができます。

オプション

n (数値引数)

n番目の囲まれたループから抜け出します。nが省略された場合、最も内側のループからのみ抜け出します。

$ break 2  # 2レベルのネストされたループから抜け出す

使用例

単純なループからの脱出

$ for i in 1 2 3 4 5; do
>   echo "Processing $i"
>   if [ $i -eq 3 ]; then
>     echo "Found 3, breaking out of loop"
>     break
>   fi
> done
> echo "Loop completed"
Processing 1
Processing 2
Processing 3
Found 3, breaking out of loop
Loop completed

ネストされたループからの脱出

$ for i in 1 2 3; do
>   echo "Outer loop: $i"
>   for j in a b c; do
>     echo "  Inner loop: $j"
>     if [ $j = "b" ] && [ $i -eq 2 ]; then
>       echo "  Breaking from inner loop"
>       break
>     fi
>   done
> done
Outer loop: 1
  Inner loop: a
  Inner loop: b
  Inner loop: c
Outer loop: 2
  Inner loop: a
  Inner loop: b
  Breaking from inner loop
Outer loop: 3
  Inner loop: a
  Inner loop: b
  Inner loop: c

数値引数を使用した複数レベルからの脱出

$ for i in 1 2 3; do
>   echo "Outer loop: $i"
>   for j in a b c; do
>     echo "  Inner loop: $j"
>     if [ $j = "b" ] && [ $i -eq 2 ]; then
>       echo "  Breaking from both loops"
>       break 2
>     fi
>   done
> done
> echo "All loops completed"
Outer loop: 1
  Inner loop: a
  Inner loop: b
  Inner loop: c
Outer loop: 2
  Inner loop: a
  Inner loop: b
  Breaking from both loops
All loops completed

ヒント:

breakは控えめに使用する

breakの過度な使用はコードの読みやすさとメンテナンス性を低下させる可能性があります。可能な場合はループロジックの再構築を検討しましょう。

条件文と組み合わせる

breakは特定の条件に基づいてループを終了するために、if文と組み合わせると最も効果的です。

breakとcontinueの違いを覚えておく

breakはループ全体を終了しますが、continueは現在の反復の残りをスキップして次の反復に移ります。

ネストされたループには数値引数を使用する

ネストされたループを扱う場合、複数のbreak文を使用する代わりにbreak nを使用して一度に複数のレベルを終了しましょう。

よくある質問

Q1. breakexitの違いは何ですか?

A. breakは現在のループからのみ抜け出しますが、exitはスクリプト全体を終了します。

Q2. ループの外でbreakを使用できますか?

A. いいえ、ループの外でbreakを使用すると「break: only meaningful in a 'for', 'while', or 'until' loop」(breakは'for'、'while'、または'until'ループ内でのみ意味があります)のようなエラーメッセージが表示されます。

Q3. 複数のネストされたループから抜け出すにはどうすればよいですか?

A. break nを使用します。nは抜け出したいネストされたループの数です。

Q4. breakはすべてのシェルタイプで動作しますか?

A. はい、breakはBash、Zsh、KshなどのすべてのPOSIX準拠シェルの標準機能です。

参考文献

https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html

改訂履歴