代码之家  ›  专栏  ›  技术社区  ›  notacorn

为什么在bash中“if[false]”的值为true,而“if false”的值不为true?

  •  1
  • notacorn  · 技术社区  · 2 年前

    在bash中运行此脚本将打印“hello”

    if [ false ]; then
        echo hello
    fi
    

    在bash中运行此脚本将打印“hello”

    if [[ false ]]; then
        echo hello
    fi
    

    只有当我去掉括号时,bash才会打印“hello”

    if false; then
        echo hello
    fi
    

    我认为括号的整个前提是启用附加功能,如 && || ,为什么在这种情况下会适得其反?

    编辑: 这就是你所说的bash引用的意思吗?仍然打印“你好”

    test=false
    if [[ "$test" ]]; then
        echo hello
    fi
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Ted Lyngmo    2 年前
    if function_or_program; then
        # do something
    fi
    

    检查是否 function_or_program 退出 0 如果是,则执行 do something

    • true false 退出的程序 0 1 分别地

    • [ 是一个程序(称为 test )可以用来测试字符串和数字。

    • [[ 是一个与程序类似的函数 测验 但它更健壮,而且由于它是一个内置函数,调用起来可能更快。

    因此,您观察到,当使用 [ [[ 您正在测试 字符串 真的 虚假的 .所有没有长度的字符串 0 都被认为是真的,所以两者 真的 虚假的 将被视为 真的

    我认为括号的整个前提是启用附加功能,如 && || ,

    您也可以执行多个程序/函数:

    if false || true; then
        # do something
    fi
    

    …并且将执行程序/函数与测试字符串相结合也是可能的:

    if ( false || true ) && [[ "$foo" == "$bar" ]]; then
        # do something
    fi