Asc*_*ian 3 bash case-statement
我想知道如何从案例通配符中获取值?我有一个为我生成菜单的数组。然后我有一个案例来确定选择了哪个选项。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
Run Code Online (Sandbox Code Playgroud)
在上面,“无效输入”值始终为空。我可以输入“foobar”作为选项,但它不显示。我也将变量更改为 just$opt但它仍然没有打印出来。
来自man bash:
select name [ in word ] ; do list ; donein 后面的单词列表被扩展,生成一个项目列表。扩展单词集打印在标准错误上,每个单词前面都有一个数字。如果省略 in 字,则打印位置参数(请参阅下面的参数)。然后显示 PS3 提示并从标准输入中读取一行。如果该行包含与显示的单词之一对应的数字,则 name 的值设置为该单词。如果该行为空,则再次显示单词和提示。如果读取 EOF,则命令完成。读取的任何其他值都会导致 name 设置为 null。读取的行保存在变量 REPLY 中。每次选择后都会执行该列表,直到执行中断命令。select 的退出状态是 list 中执行的最后一个命令的退出状态,如果没有执行任何命令,则为零。
所以只需改变你的
* )
echo "Invalid input: ${opt}"
;;
Run Code Online (Sandbox Code Playgroud)
到
* )
echo "Invalid input: ${REPLY}"
;;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |