Bash复杂if条件语句报错:如何修复算术与字符串组合判断问题?
修复Bash脚本中if条件的语法错误
你的脚本错误是因为混用了[[ ]]和(( ))两种条件判断结构,Bash不支持在[[ ]]内部嵌套(( ))。以下是两种修复方案:
方案一:用[[ ]]统一处理判断
[[ ]]支持字符串比较和基于-lt/-ge的算术比较,直接调整条件写法:
#!/bin/bash sub(){ if [[ ($1 -lt 0 || "$1" == "-0") && $3 -ge 0 ]] then echo "Condition is true" else echo "Condition is false" fi } A=-0 B=50 C=-0 D=55 sub "$A" "$B" "$C" "$D"
方案二:拆分字符串与算术判断
用[[ ]]处理字符串比较,(( ))处理算术判断,通过逻辑运算符组合:
#!/bin/bash sub(){ if { [[ "$1" == "-0" ]] || (( $1 < 0 )); } && (( $3 >= 0 )) then echo "Condition is true" else echo "Condition is false" fi } A=-0 B=50 C=-0 D=55 sub "$A" "$B" "$C" "$D"
关键说明
[[ ]]是Bash的扩展条件判断结构,适合字符串、文件属性判断,算术比较需用-lt(小于)、-ge(大于等于)这类运算符。(( ))是专门的算术表达式判断结构,返回0表示真,非0表示假,但不能嵌套在[[ ]]内部使用。- 由于
-0在算术运算中等价于0,所以需要单独用字符串比较"$1" == "-0"来匹配这个特殊值。
内容的提问来源于stack exchange,提问作者J Patel
相关产品推荐
相关产品推荐

