0

我有这个 bash 声明:

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

这给了我“假”。但我知道ls总会回来0(即真的)。我原以为这-a是一个 AND 语句。

当我将其更改为:

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

有用。这里有什么不同?不是-aAND运算符吗?

4

1 回答 1

2

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

-a是一个test操作数(test是命令也被命名[)。它并不意味着 AND 在任何其他上下文中(内置于 bash;它也是中的谓词find,例如)。此外,POSIX 规范test已将其标记为“过时”;OB在链接页面中搜索。

上面也是说[ -n "$foo" ] && [ -n "$bar" ],or [[ $foo && $bar ]],比实践更好[ -n "$foo" -a -n "$bar" ]

于 2018-06-21T15:05:40.317 回答