我有以下bash
需要更改的条件测试。
if (( exec_rc == 1 )) && [ -z "$keymap_actm" ] && [ -n "$modmap_actm" ]; then
(( exec_rc == 1 ))
必须始终为真。
但是,如果两者中的任何一个[ -z "$keymap_actm" ]
或[ -n "$modmap_actm" ]
为真,我想执行条件的主体。
什么是实现我想要的可读方式?
我有以下bash
需要更改的条件测试。
if (( exec_rc == 1 )) && [ -z "$keymap_actm" ] && [ -n "$modmap_actm" ]; then
(( exec_rc == 1 ))
必须始终为真。
但是,如果两者中的任何一个[ -z "$keymap_actm" ]
或[ -n "$modmap_actm" ]
为真,我想执行条件的主体。
什么是实现我想要的可读方式?
[[ … ]]
通篇使用(条件表达式构造)。请注意,在条件表达式中,整数之间的相等是拼写的-eq
(==
将进行文本模式匹配,这可能会或可能不会在您的特定脚本中起作用,具体取决于exec_rc
可以采用的值)。请注意,
[[ … ]]
分隔符周围需要空格(除了命令分隔标点符号旁边,例如;
),但条件表达式内的括号和运算符周围不需要空格。分组是用括号完成的,与算术类似。
你可以这样做(不推荐):
但是,在上面的示例中,括号创建了一个子外壳。它可以工作,但最好避免使用壳大括号的子壳:
或者您可以使用 a
[[
分组(不要使用 a[
):或者(推荐的语法):
请注意,该
[[
语法适用于所有版本的 bash 和大部分 Ksh 或 zsh,但不适用于 Bournesh
。