部分の前の最後の式の結果のみを使用しているように見えますthen:
if true; then echo y; else echo n; fi # y
if false; then echo y; else echo n; fi # n
if true; false; then echo y; else echo n; fi # n
if false; true; then echo y; else echo n; fi # y
結果 (つまり$?) がゼロの場合、thenパーツが実行され、それ以外の場合はパーツが実行されますelse。test ...、[ ... ]、などの構成要素は[[ ... ]]、(( ... ))式を評価して true または false を返すため、ifステートメントで使用できます。
Bash のmanページには、if ステートメントの構文は次のとおりであり、「リストは、演算子、、、またはif list; then list; [ elif list; then list; ] ... [ else list; ] fiのいずれかで区切られた 1 つまたは複数のパイプラインのシーケンスであり、必要に応じて、 、またはのいずれかで終了します」と記載されています。;&&&||;&<newline>
これはシェルの組み込みであるため、おそらく何も「記憶」する必要はありません。原則my_ifとして、引数を実行した結果を保存し、 の場合にmy_thenのみ引数を実行し、 の場合trueにmy_elseのみ、独自の条件付き構造を作成できますfalse。ただし、これは簡単に悪用されたり、誤って使用される可能性がありますが、bash のifステートメントには非常に特殊な構文が必要です。
しかし、それでも のように動作させることはできませんでしたif。上記の例は次のようになります。
#my_if true; false; ... # this wouldn't work since my_if ends at the first ;
my_if 'true; false;'; my_then echo y; my_else echo n; # and perhaps my_fi
my_if最後に、格納された状態の複雑な配列などを使用しない限り、(簡単に) s をネストすることはできません。
結論として、自分自身の一部を複製できる可能性がありifますが、すべてを複製することはできません。少なくとも、通常の よりも意味のある方法では使用できませんif。