我正在尝试建立使用Logical&&的等价性。和||操作员到'If then else fi'条件,我想验证这种理解是否正确。 考虑这个条件,与我的相关
if ( flag="$value" ) then
function1 ( p1)
rc=$?
if ( "$rc"=0 ) then
function2 ( p2)
fi
elif (flag="$value2" ) then
function1 ( p1)
rc=$?
if ( "$rc"=0 ) then
function2 ( p2)
fi
else
echo "Msg"
fi
以逻辑&&和和||如
( ( [ flag = "$value" ] && function1 (p1) ) && function2 (p2) ) ||
( ( [ flag = "$value2" ] && function1 (p2) ) && function2 (p2)) ||
echo "message"
我的Q是:
@Chepner。谢谢澄清。 所以在一个看起来像这样的案例陈述中
optf=false
opte=false
optp=false
case $opt in
p ) ...
(( $opte || $optf ) && [ -n "$s1" ] ) && echo "error message"
以上内容可以改写为
{{ $opte || $optf } ; && [ -n "$s1" ] ; } && echo "error message"
因此它会转换这个逻辑:当你遇到p选项时,检查opte或optf是否为真。如果其中任何一个为真并且s1有值,则抛出错误消息。 会是这种情况,还是还有一些漏洞要堵塞。 知道 - 我没有注意到“;” 。随{}; - 我应该能够以我想要的方式与我的操作员联系吗?
答案 0 :(得分:4)
请注意
if command1; then
command2
else
command3
fi
不等同于command1 && command2 || command3
。
command1
失败,则会跳过command2
并按预期运行command3
。command1
成功,command2
运行并成功,则会跳过command3
,如预期的那样。command1
成功,而command2
运行且失败,则会运行command3
,这与if
声明不同。你需要使用类似的东西:
command1 && { command2; true; } || command3
这将迫使&&
的右手操作数成功,无论command2
是否成功,以便command3
在command1
成功时永远不会运行。< / p>