我想知道如何从案例通配符中获取值?我有一个为我生成菜单的数组。然后,我有一个案例,确定选择哪个选项。 case语句的最后一部分是通配符值。我希望得到用于通配符的值。
以下是我正在使用的代码:
menu=()
menu+=('Option 1')
menu+=('Option 2')
menu+=('Option 3')
menu+=('Option 4')
menu+=('Quit')
echo "What would you like to install?"
echo " "
select opt in "${menu[@]}"
do
case $opt in
'Option 1' )
echo "Doing Option 1"
;;
'Option 2' )
echo "Doing Option 2"
;;
'Option 3' )
echo "Doing Option 3"
;;
'Option 4' )
echo "Doing Option 4"
;;
'Quit' )
echo "Quitting installations"
exit;
;;
* )
echo "Invalid input: ${opt}"
;;
esac
done
在上面,"无效输入"值始终为空。我可以进入" foobar"作为选项,它没有显示。我还将变量更改为$opt
,但它仍然无法打印出来。
答案 0 :(得分:4)
来自man bash
:
select name [ in word ] ; do list ; done
展开后面的单词列表,生成项目列表。扩展单词集打印在标准错误上,每个单词前面都有一个数字。如果省略in字,则打印位置参数(参见下面的参数)。然后显示PS3提示并从标准输入读取一行。如果该行包含与所显示的单词之一对应的数字,则将name的值设置为该单词。如果该行为空,则再次显示单词和提示。如果读取EOF,则命令完成。 读取任何其他值会导致name设置为null。读取行保存在变量REPLY中。在每次选择后执行列表,直到执行break命令。 select的退出状态是列表中执行的最后一个命令的退出状态,如果没有执行任何命令则为零。
所以只需改变你的
* )
echo "Invalid input: ${opt}"
;;
到
* )
echo "Invalid input: ${REPLY}"
;;