我想知道为什么
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
在我看来,当翻译寻求1时,它应该像这样工作:
0 && {} || 1 && {} || 0 && {}
0 so the 0 && {} is definitely 0; skip {}
1 means that {} must be checked to define the value of whole 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所以因为它在&&&它不会看链中的其他表达式!