部分の前の最後の式の結果のみを使用しているように見えます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
。