我不确定在提出后续问题的政策是什么。如果我违反协议,请原谅。之前我正在用bash(Here)
构建一个菜单到目前为止,我的工作非常好。代码在这里。
while [[ 1 ]]
do
cat -n "$dumpfile"
read -p "Please make a selection, select q to quit: " choice
case $choice in
# Check for digits
[0-9] ) dtvariable=$(sed -n "$choice"p "$dumpfile")
$dtvariable ;;
q|Q)
break
;;
*)
echo "Invalid choice"
;;
esac
done
除了 - 适用于最多9个菜单项。菜单将是动态的 - 可以包含1个项目,20个项目或197个项目。我已经尝试将[0-9]更改为[0-9] [0-9]以查看它是否需要12.但它没有。任何人都可以把我放在正确的道路上吗?我想我可以删除[0-9]部分并取出任何不是q的东西。但寻找数字不是更好吗?
提前谢谢。
答案 0 :(得分:2)
我会对$choice
进行一些验证:
case $choice in
# Check for digits
+([0-9]))
lines=($(wc -l ))
if (( choice > 0 && choice <= lines ))
then
dtvariable=$(sed -n "$choice"p "$dumpfile")
$dtvariable ;;
fi
# etc.
答案 1 :(得分:1)
这就是我的工作。主要区别是添加了shopt -s extglob
,它启用了扩展模式匹配,以及+([0-9])
模式,
是正则表达式[0-9]+
shopt -s extglob
while [[ 1 ]]
do
read -p "Please make a selection, select q to quit: " choice
case $choice in
# Check for digits
+([0-9]))
echo $choice ;;
q|Q)
break
;;
*)
echo "Invalid choice"
;;
esac
done