我有这个 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
有用。这里发生了什么不同的事情?是-a
不是 AND 运算符?
&&
是在 bash 中执行短路逻辑 AND 的正确方法。
-a
is a test
操作数(test
该命令也命名为[
)。它并不意味着任何其他上下文中的“AND”(内置于 bash 中;它is也是一个谓词find
, 例如)。而且,POSIX 规范test http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html是否标记为“过时”;搜索OB
在链接页面内。
上面也是想说的是[ -n "$foo" ] && [ -n "$bar" ]
, or [[ $foo && $bar ]]
,是比[ -n "$foo" -a -n "$bar" ]
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)