[解決済み] Bash関数におけるreturnとexitの違いについて
質問
の違いは何ですか?
return
と
exit
ステートメントを Bash 関数で使用すると、終了コードに関して?
解決方法を教えてください。
から
man bash
について
return [n]
;
関数の実行を停止し、n で指定された値を呼び出し元に返します。 n が省略された場合は、関数本体で最後に実行されたコマンドの状態が返されます。
...
exit [n]
:
n が省略された場合、最後に実行されたコマンドのステータスが適用されます。 EXIT時のトラップは、シェルが終了する前に実行されます。
EDITです。
質問の編集の通り、終了コードについて。
return
は、終了コードとは関係ありません。終了コードの対象は
アプリケーション/スクリプト
であり、関数ではありません。したがって、この点で、スクリプトの終了コードを設定する唯一のキーワード(呼び出し側のプログラムが
$?
シェル変数)は
exit
.
EDIT 2:
最後に紹介した文章
exit
というコメントが寄せられています。これは
return
と
exit
で、OPの理解のために、実際に
任意の
プログラム/シェルスクリプトの任意の箇所。
exit
は、呼び出したプロセスに終了コードを与えてスクリプトを終了させる唯一の方法です。
シェルで実行されるすべてのコマンドは、ローカルの "終了コード" を生成します。
$?
変数にそのコードを設定することで
if
,
&&
などの演算子で、他のコマンドを条件付きで実行することができます。
これらの終了コード(および
$?
変数)は、コマンド実行ごとにリセットされます。
ちなみに、スクリプトが最後に実行したコマンドの終了コードは、呼び出したプロセスから見たスクリプト自体の終了コードとして使用されます。
最後に、関数は、呼び出されると、終了コードに関してシェルコマンドのように動作します。関数の終了コード(
内の
関数)を設定するには
return
. したがって、関数内で
return 0
が実行されると、関数の実行は終了し、終了コード0が与えられます。
関連
-
解決策:bash: /root/.bashrc: パーミッションが拒否されました
-
[解決済み] bash file returns unexpected token `$'dottpr''
-
[解決済み] Bashのforeachループ
-
[解決済み] Bashスクリプトの'''抜け'''がある] [クローズド]
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] Bashのシングルクォートとダブルクォートの違い
-
[解決済み] bash で複数のサブプロセスが終了するのを待ち、いずれかのサブプロセスがコード !=0 で終了したときに終了コード !=0 を返すにはどうすればよいですか?
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ambiguous redirect」エラーが発生する
-
[解決済み】Bashのif条件で「unary operator expected」エラーが発生する。
-
[解決済み] Cp: ターゲットはディレクトリではありません
-
[解決済み] OS X で 'find' コマンドを使用して 'sed' を使用するとエラーが発生する。"無効なコマンドコードです。"
-
[解決済み] systemd サービス 203/EXEC の失敗 (そのようなファイルやディレクトリがない) を修正する。
-
[解決済み] ssh / リモートbashコマンドでシングルクォート文字をエスケープするにはどうすればよいですか?
-
[解決済み] Bashで最新のディレクトリを変数に取得する
-
[解決済み] bashの"-ne "はどういう意味ですか?
-
[解決済み] Bashスクリプトのset -o pipefailの意味を教えてください。
-
[解決済み] Bashのforeachループ