終了コードに関して、Bash 関数のreturn
とステートメントの違いは何ですか?exit
ベストアンサー1
から;man bash
return [n]
関数の実行を停止し、n で指定された値を呼び出し元に返します。n を省略すると、戻りステータスは関数本体で最後に実行されたコマンドのステータスになります。
... の上exit [n]
:
シェルを n のステータスで終了させます。n を省略すると、終了ステータスは最後に実行されたコマンドのステータスになります。シェルが終了する前に、EXIT のトラップが実行されます。
編集:
質問の編集によると、終了コードに関しては、return
は終了コードとは何の関係もありません。終了コードは、関数ではなく、アプリケーション/スクリプトを対象としています。したがって、この点で、スクリプトの終了コード (シェル変数を使用して呼び出しプログラムがキャッチできるもの$?
) を設定する唯一のキーワードは ですexit
。
編集2:
私が最後に言及した文は、exit
いくつかのコメントを引き起こしています。これは、OP の区別return
とexit
理解のために作成されたもので、実際、プログラム/シェル スクリプトの任意の時点で、呼び出しexit
プロセスへの終了コードでスクリプトを終了する唯一の方法です。
シェルで実行されるすべてのコマンドは、ローカルの「終了コード」を生成します。変数を$?
そのコードに設定し、、およびその他の演算子と組み合わせて使用してif
、&&
条件付きで他のコマンドを実行できます。
これらの終了コード (および変数の値$?
) は、コマンドの実行ごとにリセットされます。
ちなみに、スクリプトによって最後に実行されたコマンドの終了コードは、呼び出しプロセスから見たスクリプト自体の終了コードとして使用されます。
最後に、関数は呼び出されると、終了コードに関してシェル コマンドとして機能します。関数 (関数内return
) の終了コードは を使用して設定されます。したがって、関数内で がreturn 0
実行されると、関数の実行が終了し、終了コード 0 が返されます。