好奇的问题.是否有可能以某种方式在bash中自动打印出某个开关盒的所有情况?在某种程度上,它保持尽可能的可维护性,这意味着如果添加新案例以打印出相同的案例,则不必再添加任何代码.
例如,如果案例代表命令,那将是有用的.然后帮助功能可以打印出所有可用的命令.
没有直接的方法来实现这一点,但您可以使用数组来维护您的选择:
# Define your choices - be sure not to change their order later; only
# *append* new ones.
choices=( foo bar baz )
# Make the array elements the case branches *in order*.
case "$1" in
"${choices[0]}")
echo 'do foo'
;;
"${choices[1]}")
echo 'do bar'
;;
"${choices[2]}")
echo 'do baz'
;;
*)
echo "All choices: ${choices[@]}"
esac
Run Code Online (Sandbox Code Playgroud)
这使得分支的可读性降低,但如果您仔细维护阵列,则它是一种可管理的解决方案.
请注意如何包含分支条件"...",以防止shell将值解释为(类似glob)模式.
也就是说,正如chepner指出的那样,也许您希望将您的选择定义为匹配字符串变体的模式:
在那种情况下:
在数组中使用引号定义模式choices; 例如,choices=( foo bar baz 'h*' )
在分支中引用它不引用case ; 例如,${choices[3]})