1. ホーム
  2. bash

[解決済み] Bash関数におけるreturnとexitの違いについて

2022-03-20 08:23:39

質問

の違いは何ですか? returnexit ステートメントを Bash 関数で使用すると、終了コードに関して?

解決方法を教えてください。

から man bash について return [n] ;

関数の実行を停止し、n で指定された値を呼び出し元に返します。 n が省略された場合は、関数本体で最後に実行されたコマンドの状態が返されます。

... exit [n] :

n が省略された場合、最後に実行されたコマンドのステータスが適用されます。 EXIT時のトラップは、シェルが終了する前に実行されます。

EDITです。

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

EDIT 2:

最後に紹介した文章 exit というコメントが寄せられています。これは returnexit で、OPの理解のために、実際に 任意の プログラム/シェルスクリプトの任意の箇所。 exit は、呼び出したプロセスに終了コードを与えてスクリプトを終了させる唯一の方法です。

シェルで実行されるすべてのコマンドは、ローカルの "終了コード" を生成します。 $? 変数にそのコードを設定することで if , && などの演算子で、他のコマンドを条件付きで実行することができます。

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

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

最後に、関数は、呼び出されると、終了コードに関してシェルコマンドのように動作します。関数の終了コード( 内の 関数)を設定するには return . したがって、関数内で return 0 が実行されると、関数の実行は終了し、終了コード0が与えられます。