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是引人注目的。