在bash中这两种方式的区别是什么?

在bash中这两种方式的区别是什么?,bash,Bash,这两者有什么区别 使用&&和|: command1 && command2 || command3 使用if和else: if command1 then command2 else command3 fi 后者将始终有效。前者有一个边界条件,可以执行command2和command3。在第一个示例中,如果command1或command2失败,将执行command3:如果command1通过,但command2失败,将执行comman

这两者有什么区别

  • 使用
    &&
    |

    command1 && command2 || command3
    
  • 使用
    if
    else

    if command1  
    then  
        command2  
    else  
        command3  
    fi
    

  • 后者将始终有效。前者有一个边界条件,可以执行
    command2
    command3

    在第一个示例中,如果command1或command2失败,将执行command3:如果command1通过,但command2失败,将执行command3。在if-then-else示例中,只有当command1失败时,才会执行command3

    换言之,第一个词在翻译成if-then-else时变成:

    if command1
    then
        if !command2
        then
            command3
        fi
    else
        command3
    fi
    
    使用command1=true、command2=false和command3=echo“something”,您可以看到差异。
    &&-|
    版本:

    true && false || echo 'something'
    
    if true
    then
        false
    else
        echo 'something'
    fi
    
    将产生
    某物
    作为输出。使用
    if-then-else
    版本时:

    true && false || echo 'something'
    
    if true
    then
        false
    else
        echo 'something'
    fi
    

    您将没有输出。

    很明显,这两个示例的行为不同。哪一个行为“正确”,哪一个是童车,当然取决于意图是什么!我在这里有点争论,但我不认为“直觉”是一个更好的词。考虑<代码> iStasePuuliField& & Runl FuffyNoTyjyAtfuluaSurvivue/Cuth>:它既直观又正确,但<代码> I/St/Eth/Fi版本既不直观也不正确。我猜想嵌套<代码>是真的,如果 S更可读。1两个示例在语义上的含义不同,因此这不是可读性问题。查看我的答案了解详细信息。突然想起我做过这样的脚本。我甚至画了一张流程图来看看。