Bashcase语句中的起始括号有意义吗?

我在 Bash 脚本中找到了一个 case 语句,如下所示:

case $i in
    (0) set -- ;;
    (1) set -- "$args0" ;;
    (2) set -- "$args0" "$args1" ;;
    (3) set -- "$args0" "$args1" "$args2" ;;
    (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
    (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
    (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
    (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
    (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
    (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac

我从来没有见过使用一个开始(,我只见过SOME_CASE) command list ;;. 我找不到对这种其他格式的任何引用 - 这个起始括号有什么特殊意义吗?

回答

起始括号是可选的,但它(通常)会留下平衡括号,这使得在编辑器中更容易,例如vim可以从右括号(例如), ], })跳转到匹配的左括号,考虑嵌套括号。它没有其他意义。

原始的 Bourne shell 不支持前导左括号。

另请参阅复合命令case下的 POSIX shell 规范或条件构造下的 Bash 手册。


看起来好像您的脚本迫切需要使用 Bash数组(另请参阅Shell 参数)。

declare -a args

args+=("argument 0")
args+=("argument 1")
args+=("argument 2" "argument 3" "argument 4 with spaces")

set -- "${args[@]}"

没有case;参数数量没有限制。如何构建阵列是可以讨论的,但单行而不是 10 路case是引人注目的。


以上是Bashcase语句中的起始括号有意义吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>