shell 脚本中的“elif”和“else if”有什么区别?

Zee*_*nto 5 unix shell ksh

我对 shell 脚本很陌生。

当我查看一些为ksh ( #!/bin/ksh)编写的代码时,我看到在一个脚本中else if也有elif使用。

那么,shell 脚本中else if和之间有什么区别elif

mpy*_*mpy 5

我尝试用一​​句话来回答:如果您使用,elif则处理一个 if-clause,如果您使用else if两个if-clause

看看这些简单的例子:

testone() {
  if [[ $CASE == 1 ]]; then
    echo Case 1.
  elif [[ $CASE == 2 ]]; then
    echo Case 2.
  else 
    echo Unknown case.
  fi
}
Run Code Online (Sandbox Code Playgroud)

这在形式上是一个 if 子句(整洁的缩进有时是有意义的),因为您可以看到每个案例都处于相同的层次结构级别。

现在,相同的功能else if

testtwo() {
  if [[ $CASE == 1 ]]; then
    echo Case 1.
  else
    if [[ $CASE == 2 ]]; then
      echo Case 2.
    else 
      echo Unknown case.
    fi
  fi
}
Run Code Online (Sandbox Code Playgroud)

形式上,您有两个级联的 if 子句和相应的两个结束fi语句。else if请注意,如果我写一行(如您的问题)或两行(如我的示例),则没有区别。

我猜测为什么在同一个脚本中使用这两种形式:如果您已经编写了完整的 if 子句,但需要(逻辑原因)将其复制/剪切并粘贴到现有的 if 子句中,那么您最终会得到else if. 但是,当您从头开始编写完整的 if 子句时,您可能会使用恕我直言更易于阅读的形式elif