我followed instructions in this link使用select
创建一个特定的四选项菜单:
function showMenu() {
PS3=$1
shift
options=("$@")
select opt in "${options[@]}"
do
case $opt in
${options[0]})
echo "${options[0]}"
break
;;
${options[1]})
echo "${options[1]}"
break
;;
${options[2]})
echo "${options[2]}"
break
;;
${options[3]})
echo "${options[3]}"
break
;;
*) # just loop ...
;;
esac
done
}
这在以下方式调用时效果很好:
COLORS=("red" "blue" "green" "yellow")
COLOR=$(showMenu 'Choose a color' "${COLORS[@]}")
# if user inputs a '1', then COLOR would be blue
在shell脚本中,我需要有多个菜单,而我可以根据选项的数量(例如3,4,5等)编写函数,该函数本质上是同一构造的副本。有没有办法编写一个通用菜单,在select/case
中显示与传递数组中的值一样多的选项?
例如,如何创建一个具有通用菜单容量的功能,该功能两个如上所述(对于四种颜色),如下所示(对于五个文件夹)?
FOLDERS=("foo", "bar", "baz", "too", "moo")
FOLDER=$(genericSelect 'Choose a folder' "${FOLDERS[@]}")
# if user inputs a '3', then FOLDER would be too
答案 0 :(得分:1)
试试这个:
function showMenu() {
PROMPT=$1
shift
options=("$@")
numOptions=${#options[@]}
read -p "${PROMPT}: " response
echo "${options[$response]}"
}
请注意,这只是一块骨头 - 那里没有错误处理! :)