使用多个if语句和if语句之间有什么区别吗?

Mar*_*ski 29 shell if-statement

这个问题专门针对shell脚本,但可能与任何编程语言有关.

使用多个if语句和elif在shell脚本中使用语句有什么区别吗?并且,case声明在我的情况下不起作用.

Jon*_*eet 56

是的,可能.考虑一下(C#,Java,无论如何):

int x = GetValueFromSomewhere();

if (x == 0)
{
    // Something
    x = 1;
}
else if (x == 1)
{
    // Something else...
}
Run Code Online (Sandbox Code Playgroud)

对此:

int x = GetValueFromSomewhere();

if (x == 0)
{
    // Something
    x = 1;
}
if (x == 1)
{
    // Something else...
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,只有一个 "东西"或"别的东西......"的发生.在第二种情况下,第一个块的副作用使第二个块中的条件成立.

然后再举一个例子,条件可能不是互相排斥的:

int x = ...;

if (x < 10)
{
    ...
} 
else if (x < 100)
{
    ...
}
else if (x < 1000)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果你在这里摆脱"其他",那么一旦一个条件匹配,其余条件也将匹配.


P.B*_*key 11

它与效率和您的需求有关.如果陈述是彼此独立执行的.每个人都会跑.否则if语句仅在前一个if失败时才执行.


fas*_*ava 7

if (x == 0) {
    // 1
}


if (x >= 0) {
    // 2
}

if (x <= 0) {
    // 3
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将产生与下面的代码不同的值x=0.

if (x == 0) {
    // 1
} else if (x >= 0) {
    // 2
} else {
   // 3
}
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,所有的陈述1,2以及3将被用于执行x = 0.在第二种情况下,只有陈述1.

  • @Mark:`else if`结构实际上是一个`else`后跟一个`if`:`if(a){} else if(b){}`将编译与`if(a){}完全相同else {if(b){}}`因为前者根据语言语法实际上被解析为后者.(bash中的`elif`本质上是语法糖,以防止你打开多个块.) (8认同)