这个问题专门针对shell脚本,但可能与任何编程语言有关。
在shell脚本中使用多个if
语句和使用elif
语句之间有什么区别吗?并且,case
声明在我的情况下不起作用。
答案 0 :(得分:50)
是的,可能。考虑一下(C#,Java,等等):
int x = GetValueFromSomewhere();
if (x == 0)
{
// Something
x = 1;
}
else if (x == 1)
{
// Something else...
}
vs this:
int x = GetValueFromSomewhere();
if (x == 0)
{
// Something
x = 1;
}
if (x == 1)
{
// Something else...
}
在第一种情况下,只会出现一个的“Something”或“Something else ...”。在第二种情况下,第一个块的副作用使第二个块中的条件成立。
然后再举一个例子,条件可能不是互相排斥的:
int x = ...;
if (x < 10)
{
...
}
else if (x < 100)
{
...
}
else if (x < 1000)
{
...
}
如果你在这里摆脱“其他”,那么只要一个条件匹配,其余条件也会匹配。
答案 1 :(得分:10)
这与效率和需求有关。如果陈述是彼此独立执行的。每个人都会跑。否则if语句仅在前一个if失败时执行。
答案 2 :(得分:7)
if (x == 0) {
// 1
}
if (x >= 0) {
// 2
}
if (x <= 0) {
// 3
}
以上代码将生成与x=0
下面的代码不同的值。
if (x == 0) {
// 1
} else if (x >= 0) {
// 2
} else {
// 3
}
在第一种情况下,将1
执行所有语句2
,3
和x = 0
。在第二种情况下,只有1
语句。
答案 3 :(得分:4)
如果有多个if语句,则每个语句都单独计算,如果条件合适,则可能会执行所有语句中的代码。如果你有if / elif语句,那么只有在评估第一个条件的特定结果后才会评估第二个条件。
考虑这个伪代码:
If (cond A) { action 1}
If (cond B) { action 2}
如果cond A和cond B都为真,则两个动作都将执行。
另一方面,这个伪代码:
If (cond A) {action 1}
Elif (cond B) {action 2}
无论两种情况如何评估,都只会执行两种方法中的一种(或两种方式)。