【发布时间】:2015-09-29 17:27:39
【问题描述】:
我想知道为什么
i=10
if [ $i -lt 5 ]; then
echo "$i < 5"
elif [ $i -gt 5 ]; then
echo "$i > 5"
elif [ $i -eq 5 ]; then
echo "$i = 5"
fi
输出正确的结果:
10 > 5
而
i=10
[ $i -lt 5 ] && {
echo "$i < 5"
} || [ $i -gt 5 ] && {
echo "$i > 5"
} || [ $i -eq 5 ] && {
echo "$i = 5"
}
表现异常:
10 > 5
10 = 5
在我看来,当解释器寻找1s 时,它应该是这样工作的:
0 && {} || 1 && {} || 0 && {}
0 所以 0 && {} 肯定是 0;跳过
{}1 表示必须检查 {} 以定义整个
1 && {}的值
因此结果为 1,但唯一执行的{} 停留在1 之后。
但是,当我输入 ! { 而不是 {s 时,这一切都可以正常工作。
i=10
[ $i -lt 5 ] && ! {
echo "$i < 5"
} || [ $i -gt 5 ] && ! {
echo "$i > 5"
} || [ $i -eq 5 ] && ! {
echo "$i = 5"
}
为什么?!我认为它会寻找1s,所以因为它在&& 中找到了0,所以它不会查看链中的其他表达式!
【问题讨论】:
标签: bash shell unix boolean zsh