Bashスクリプトの次の行は次のとおりです。
$GEN_SDK $GEN_SDK_FLAGS $OUT_DIR/toolchain || panic "Cannot generate SDK toolchain!"
実行すると競合が発生します。この行の論理は、最初の命令が正しく実行された場合、2番目の命令が評価されないことです。しかし、最初のコマンドが正しく機能することはどういう意味ですか?return true
バッシュにはそんなことはありません。では、正常に動作しないことをどのように理解できますか?
答え1
シェルでは、すべてのプロセスに終了コード(または戻りコード)があります。終了コードは、0
エラーが発生しなかったことを意味するという点で「実際」です(プログラミング言語で通常期待されるのとは対照的に「0
偽」です)。終了コードがなければ、bash構造がcommand || othercommand
実行されます。これは、終了コードが次の場合にのみ同じです。othercommand
command
0
command && othercommand
othercommand
command
はい 0
。
試したい場合は、シェル拡張が前のコマンド$?
の終了コードとして評価されます。
$ true; echo $?
0
$ false; echo $?
1
$ true || echo "Darned true."
$ false || echo "Lies."
Lies.