bash – Shell:逻辑AND和OR而不是if-else
我想知道为什么
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时,它应该像这样工作:
因此结果为1,但执行的唯一{}保持在1之后. i=10 [ $i -lt 5 ] && ! { echo "$i < 5" } || [ $i -gt 5 ] && ! { echo "$i > 5" } || [ $i -eq 5 ] && ! { echo "$i = 5" } 为什么?!我认为它寻求1s所以因为它在&&&它不会看链中的其他表达式! 解决方法
{…}没有区别,所以你拥有的就是这个:
i=10 [ $i -lt 5 ] && echo "$i < 5" || [ $i -gt 5 ] && echo "$i > 5" || [ $i -eq 5 ] && echo "$i = 5" 它的工作方式是: > [$i -lt 5]:这是假的(返回失败),所以它跳转到下一个||,后面有[$i -gt 5]. &安培;&安培;和||被称为短路操作符. 编辑:进一步强调这一点, A && B ||?C 是不一样的 if A; then B else C fi 它相当于 if A; then if ! B; then C fi else C fi (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |