看起来它只使用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 ..., [ ... ],[[ ... ]]等结构(( ... ))对表达式求值并返回真或假,这就是它们可以在if语句中使用的原因。
Bash 的man页面说 if 语句的语法是if list; then list; [ elif list; then list; ] ... [ else list; ] fi,并且“列表是一个或多个管道的序列,由运算符;, &,&&或中的一个分隔,并且可选地由,或||中的一个终止。”;&<newline>
由于它是一个内置的 shell,它可能不需要“记住”任何东西。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。