Shell 和,或if语句中的条件
我有以下代码Shell 和,或if语句中的条件,shell,unix,if-statement,conditional-statements,Shell,Unix,If Statement,Conditional Statements,我有以下代码 elif [ $text2 == 'LANDING' ] && [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; then 条件是text2应该是landing,而text4可以是fail或null。 如何评估上述命令 如果我做错了什么,请帮忙 提前感谢使用大括号或圆括号将|操作数分组在一起。圆括号看起来更好,但它们创建的子shell效率很低,所以大括号是一种方法,尽管它们很难看 elif [ $text2 == 'LAN
elif [ $text2 == 'LANDING' ] && [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; then
条件是text2应该是landing,而text4可以是fail或null。
如何评估上述命令
如果我做错了什么,请帮忙
提前感谢使用大括号或圆括号将
|
操作数分组在一起。圆括号看起来更好,但它们创建的子shell效率很低,所以大括号是一种方法,尽管它们很难看
elif [ $text2 == 'LANDING' ] && { [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; }; then
请注意,大括号需要额外的分号
或者,如果您使用的是bash,则可以使用双方括号,这允许使用稍微漂亮的:
elif [[ $text2 == 'LANDING' && ("$text4" == 'FAIL' || "$text4" == '') ]]; then
使用大括号或圆括号将操作数分组在一起。圆括号看起来更好,但它们创建的子shell效率很低,所以大括号是一种方法,尽管它们很难看
elif [ $text2 == 'LANDING' ] && { [ "$text4" == 'FAIL' ] || [ "$text4" == '' ]; }; then
请注意,大括号需要额外的分号
或者,如果您使用的是bash,则可以使用双方括号,这允许使用稍微漂亮的:
elif [[ $text2 == 'LANDING' && ("$text4" == 'FAIL' || "$text4" == '') ]]; then
您需要明确地将它们分组:
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
)
您需要明确地将它们分组:
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
)
不是特别推荐,但是对于bash,您可以在
[…]
elif [[ $text2 == 'LANDING' && $text4 == @(FAIL|) ]]; then
不是特别推荐,但是对于bash,您可以在
[…]
elif [[ $text2 == 'LANDING' && $text4 == @(FAIL|) ]]; then