Bash関数のreturnとexitの違い 質問する

Bash関数のreturnとexitの違い 質問する

終了コードに関して、Bash 関数のreturnとステートメントの違いは何ですか?exit

ベストアンサー1

から;man bashreturn [n]

関数の実行を停止し、n で指定された値を呼び出し元に返します。n を省略すると、戻りステータスは関数本体で最後に実行されたコマンドのステータスになります。

... の上exit [n]

シェルを n のステータスで終了させます。n を省略すると、終了ステータスは最後に実行されたコマンドのステータスになります。シェルが終了する前に、EXIT のトラップが実行されます。

編集:

質問の編集によると、終了コードに関しては、returnは終了コードとは何の関係もありません。終了コードは、関数ではなく、アプリケーション/スクリプトを対象としています。したがって、この点で、スクリプトの終了コード (シェル変数を使用して呼び出しプログラムがキャッチできるもの$?) を設定する唯一のキーワードは ですexit

編集2:

私が最後に言及した文は、exitいくつかのコメントを引き起こしています。これは、OP の区別returnexit理解のために作成されたもので、実際、プログラム/シェル スクリプトの任意の時点で、呼び出しexitプロセスへの終了コードでスクリプトを終了する唯一の方法です。

シェルで実行されるすべてのコマンドは、ローカルの「終了コード」を生成します。変数を$?そのコードに設定し、、およびその他の演算子と組み合わせて使用​​してif&&条件付きで他のコマンドを実行できます。

これらの終了コード (および変数の値$?) は、コマンドの実行ごとにリセットされます。

ちなみに、スクリプトによって最後に実行されたコマンドの終了コードは、呼び出しプロセスから見たスクリプト自体の終了コードとして使用されます。

最後に、関数は呼び出されると、終了コードに関してシェル コマンドとして機能します。関数 (関数return) の終了コードは を使用して設定されます。したがって、関数内で がreturn 0実行されると、関数の実行が終了し、終了コード 0 が返されます。

おすすめ記事