【发布时间】:2018-06-21 15:04:20
【问题描述】:
我有这个 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 运算符吗?
【问题讨论】:
-
顺便说一句,使用
grep -q "state UP"效率更高,而不用打扰>/dev/null。当grep知道您不需要输出时,它 (1) 不会费心编写它,即使是在它被扔掉的/dev/null; (2) 可以在看到匹配项后立即退出,无需读取输入流的其余部分。 -
@CharlesDuffy 感谢您在
grep -q "state UP"上的注释,我将在未来使用它。对于将来发现此问题的任何人,此问题曾经有此命令:ip link show eth1 | grep "state UP" > /dev/null 2>&1为了简单起见,我将其编辑了。
标签: linux bash conditional debian-based