Bash -a 与 bash &&
Bash -a vs bash &&
我有这个 bash 声明:
if ls > /dev/null 2>&1 -a ls > /dev/null 2>&1; then
echo "true";
else
echo "false";
fi
这给了我 "false"。但我知道 ls
将始终 return 0
(即正确)。我以为 -a
是一个 AND 语句。
当我将其更改为:
if ls > /dev/null 2>&1 && ls > /dev/null 2>&1; then
echo "true";
else
echo "false";
fi
有效。这里有什么不同? -a
不是 AND 运算符吗?
&&
是在 bash.
中执行短路逻辑与的正确方法
-a
是一个 test
操作数(test
是命令也被命名为 [
)。它并不表示任何其他上下文中的 AND(内置于 bash;它 是 也是 find
中的谓词)。此外,the POSIX specification for test
已标记为"obsolescent";在链接页面中搜索 OB
。
上面也是说[ -n "$foo" ] && [ -n "$bar" ]
,或者[[ $foo && $bar ]]
比[ -n "$foo" -a -n "$bar" ]
更好的做法。
我有这个 bash 声明:
if ls > /dev/null 2>&1 -a ls > /dev/null 2>&1; then
echo "true";
else
echo "false";
fi
这给了我 "false"。但我知道 ls
将始终 return 0
(即正确)。我以为 -a
是一个 AND 语句。
当我将其更改为:
if ls > /dev/null 2>&1 && ls > /dev/null 2>&1; then
echo "true";
else
echo "false";
fi
有效。这里有什么不同? -a
不是 AND 运算符吗?
&&
是在 bash.
-a
是一个 test
操作数(test
是命令也被命名为 [
)。它并不表示任何其他上下文中的 AND(内置于 bash;它 是 也是 find
中的谓词)。此外,the POSIX specification for test
已标记为"obsolescent";在链接页面中搜索 OB
。
上面也是说[ -n "$foo" ] && [ -n "$bar" ]
,或者[[ $foo && $bar ]]
比[ -n "$foo" -a -n "$bar" ]
更好的做法。