具有多个IF条件的Bash Shell语法问题
我对单IF子句语句中的多个条件感到困惑 如果我使用下面的语法,它会抛出错误具有多个IF条件的Bash Shell语法问题,bash,shell,unix,Bash,Shell,Unix,我对单IF子句语句中的多个条件感到困惑 如果我使用下面的语法,它会抛出错误 if [[ [ "$a" == "" && "$b" != "" ] && [ "$b" == "" ] ]]; then echo 1; else echo 2; fi -bash:[:缺少“%]” 但如果我只更换[内部条件],其工作如下所示 if [[ ( "$a" == "" && "$b" != "" ) && ( "$b" == "" )
if [[ [ "$a" == "" && "$b" != "" ] && [ "$b" == "" ] ]];
then echo 1;
else echo 2;
fi
-bash:[:缺少“%]”
但如果我只更换[内部条件],其工作如下所示
if [[ ( "$a" == "" && "$b" != "" ) && ( "$b" == "" ) ]];
有人能说为什么它如此令人困惑,为什么它是这样设计的吗?我对不同类型的大括号的用法感到困惑[.何时使用[何时不使用]。哪一种对你来说更容易?“困惑”位实际上是[这是一个历史上的程序,尽管很久以前在shell中实现过,并且有/有..限制[[是对表达式(包括括号)的高级支持的'special bash'。只需使用[[bash_expression_with_Branchers_here]]生活就会好起来。因为[必须保持与旧shell行为的兼容性][[是bash语法,较新/更强大且特定于bash-在本例中,提供了预期的语法,您需要分别使用-a和-o,而不是&&和| |[也称为test can be.@chepner虽然在这种情况下可以删除显式分组,但它不允许在逻辑运算符周围使用括号,也不允许干净地表示a | | b&&c。您仍然可以对测试进行分组:{a;}|{b&&c},其中a、b和c是测试命令。