代码之家  ›  专栏  ›  技术社区  ›  Connor Harikrishnan

bash-a与bash&&[重复]

  •  0
  • Connor Harikrishnan  · 技术社区  · 7 年前

    这个问题已经有了答案:

    我有这个bash声明:

    if ls > /dev/null 2>&1 -a ls > /dev/null 2>&1; then
        echo "true"; 
    else 
        echo "false"; 
    fi
    

    这给了我“假”。但我知道 ls 会一直回来的 0 (即正确)。我以为 -a 是一个和声明。

    当我将此更改为:

    if ls > /dev/null 2>&1 && ls > /dev/null 2>&1; then
        echo "true"; 
    else 
        echo "false"; 
    fi
    

    它起作用了。这里发生了什么不同的事情?是 -A 不是AND运算符?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Charles Duffy    7 年前

    && 是在bash中执行短路逻辑和的正确方法。

    -a 是一个 test 操作数( 测试 命令是否也命名 [ )。它并不意味着在任何其他上下文中(内置于bash中;它 中的谓词 find 例如)。而且, the POSIX specification for test 是否标记为“过时”;搜索 OB 在链接页中。

    以上也可以这么说 [ -n "$foo" ] && [ -n "$bar" ] ,或 [[ $foo && $bar ]] ,比 [ -n "$foo" -a -n "$bar" ] .

    推荐文章