为什么有些人在shell脚本的if条件后面加上分号?

And*_*ndy 0 bash shell

我刚刚习惯了shell脚本编写,并且遇到了一些我不太确定如何使用Google的内容。

在我阅读的教程中,它表明编写if语句的正确方法是这样的:

if [ $a == $b ]; then
  echo "a == b"
fi
Run Code Online (Sandbox Code Playgroud)

但是我在我们的代码库中看到省略了半冒号的地方:

if [ $a == $b ] then
  echo "a == b"
fi
Run Code Online (Sandbox Code Playgroud)

我也看过双方括号:

if [[ $a == $b ]]; then
  echo "a == b"
fi
Run Code Online (Sandbox Code Playgroud)

当我在bash中测试了所有这些功能后,似乎没有什么区别。有区别吗?它与兼容性有关吗?正确的风格是什么?

Joh*_*ica 5

if [ $a == $b ]; then
  echo "a == b"
fi
Run Code Online (Sandbox Code Playgroud)

您可以使用分号,也可以then单独写一行。允许任何一个。

if [ $a == $b ]
then
  echo "a == b"
fi
Run Code Online (Sandbox Code Playgroud)

;没有换行也不是语法错误。

$ if [ $a == $b ] then
>   echo "a == b"
> fi
bash: syntax error near unexpected token `fi'
Run Code Online (Sandbox Code Playgroud)

至于[vs [[,请参阅: