Bash Case菜单-动态选项
我不确定在提出后续问题方面的政策是什么。所以如果我违反了协议,请原谅。早些时候,我在bash()中构建菜单 到目前为止,我的工作非常好。代码在这里Bash Case菜单-动态选项,bash,menu,case,Bash,Menu,Case,我不确定在提出后续问题方面的政策是什么。所以如果我违反了协议,请原谅。早些时候,我在bash()中构建菜单 到目前为止,我的工作非常好。代码在这里 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] ) dtvari
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的东西。但寻找数字不是更好吗
提前谢谢你。这是我要做的工作。主要区别在于添加了
shopt-s extglob
,它打开了扩展模式匹配,而+([0-9])
模式
bash是正则表达式的等价物[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
我会对
$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.
案例中的$choice
#检查数字
+([0-9]))
行=($(wc-l))
如果((choice>0&&choice,谢谢,它在“+”([0-9])旁边的意外标记“(”错误)附近抛出语法错误,我看不到任何额外的空格或任何其他内容。仍在查找。是否确保添加extglob?没有它,它将无法工作,因为+(…)语法是由extglob启用的。谢谢Dennis。我没有使用extglob部分,它的测试非常棒。