看起来它只使用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
。