shell 表达式整数和字符串逻辑运算
-
注意
- 单中括号[]里只能用-a 表示与, -o 表示或。不能适用&& 和 ||
- 双中括号[[]],不能使用-a和-o, 只能使用&& 和 ||
- 多个表达式连接只能用 && 和 ||, 如 [] && [] || []
-
整数多条件判断, [] 和 [[]] 都适用
[[ 2 -gt 1 && 3 -gt 1 ]] && echo 'T' || echo 'F' # T [[ 2 -gt 1 && 1 -gt 1 ]] && echo 'T' || echo 'F' # F [[ 2 -gt 1 || 1 -gt 1 ]] && echo 'T' || echo 'F' # T [[ 2 -gt 1 ]] && [[ 3 -gt 1 ]] && echo 'T' || echo 'F' # T [ 2 -gt 1 -a 3 -gt 1 ] && echo 'T' || echo 'F' # T [ 2 -gt 1 -a 1 -gt 1 ] && echo 'T' || echo 'F' # F [ 2 -gt 1 -o 1 -gt 1 ] && echo 'T' || echo 'F' # T
-
字符串多条件判断, 只适用于[[]]
- 正确示例
v='Hello World' [[ $v == *'Hello'* && $v == *'World'* ]] && echo 'Y' || echo 'N' # Y [[ $v == *'Hello'* || $v == *'test'* ]] && echo 'Y' || echo 'N' # Y [[ $v == *'Hello'* && $v == *'test'* ]] && echo 'Y' || echo 'N' # N [[ $v == *'Hello'* ]] && [[ $v == *'World'* ]] && echo 'Y' || echo 'N' # Y [[ $v == *'Hello'* ]] || [[ $v == *'test'* ]] && echo 'Y' || echo 'N' # Y [[ $v == *'Hello'* ]] && [[ $v == *'test'* ]] && echo 'Y' || echo 'N' # N
- 错误示例
结果都为Nv='Hello World' [ "$v" == *'Hello'* -a "$v" == *'World'* ] && echo 'Y' || echo 'N' [ "$v" == *'Hello'* -o "$v" == *'test'* ] && echo 'Y' || echo 'N' [ "$v" == *'Hello'* ] && [ "$v" == *'World'* ] && echo 'Y' || echo 'N' [ "$v" == *'Hello'* ] || [ "$v" == *'test'* ] && echo 'Y' || echo 'N'
- 正确示例