我有以下代码
elif [ $text2 == 'LANDING' ] && [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; then
条件是text2应该登陆,text4可以是fail或null。 如何评估上述命令。
如果我做错了,请帮忙 提前致谢
答案 0 :(得分:1)
您需要明确地对它们进行分组:
elif [ "$text2" = 'LANDING' ] &&
{ [ "$text4" = 'FAIL' ] || [ "$text4" = '' ]; }; then
您的尝试将成功执行以下两个条件之一:
text2
登陆且 text4
失败text4
是空的或未设置。由于&&
和||
具有相同的优先级,您可以(可能令人惊讶地)编写它而不进行分组:
elif [ "$text4" = '' ] || [ "$text4" = FAIL ] && [ $text2 == 'LANDING' ]; then
如果您使用的是bash
,则可以使用[[ ... ]]
命令代替[ ... ]
。分组是必需的; [[ ... ]]
做中的运算符具有您期望从其他语言中获得的优先级(即a || b && c
为a || (b && c)
,而不是(a || b) && c
。< / p>
elif [[ $text2 == 'LANDING' && ( "$text4" == 'FAIL' || "$text4" == '') ]]; then
答案 1 :(得分:1)
不是特别推荐,但使用bash,您可以在<system.serviceModel>
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="true"
maxMessagesToLog="3000"
maxSizeOfMessageToLog="2000"/>
</diagnostics>
<!-- your other stuff here -->
</system.serviceModel>
tracing.scvlog
答案 2 :(得分:0)
使用花括号或括号将||
个操作数组合在一起。圆括号看起来更好,但是它们会创建一个效率低下的子壳,所以即使它们很难看,也可以使用花括号。
elif [ $text2 == 'LANDING' ] && { [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; }; then
请注意,花括号需要额外的分号。
或者,如果你正在使用bash,你可以使用双方括号,这样可以让它更漂亮:
elif [[ $text2 == 'LANDING' && ("$text4" == 'FAIL' || "$text4" == '') ]]; then