我想展示用户友好的whiptail
菜单。
我的目标whiptail
是:
Choice1
Choice2
Choice3
Choice4
我的数组包括:
Choice1 Choice2 Choice3 Choice4
我通过循环运行数组,如下所示:
for value in ${value[@]}
do
echo "$value"
done
我无法添加whiptail
内部回声,因为我得到了另外 4 个菜单。
我尝试过这样的脚本:
$val=$(whiptail --title "xx" --menu "choose" 16 78 10
for value in ${value[@]}
do
echo "$value"
done
3>&1 1>&2 2>&3)
运行上面提到的脚本后,我的 shell 看起来很糟糕。
脚本后的外壳:
有人能解决我的问题吗?
答案1
您的脚本中有几个错误,例如您不应为循环迭代器指定与数组本身相同的名称。但是,您不需要任何循环来完成此任务,只需使用特殊的数组索引一次放置所有数组元素即可@
:
value=(Choice1 "" Choice2 "" Choice3 "" Choice4 "")
whiptail --title "xx" --menu "choose" 16 78 10 "${value[@]}"
注意引号内的空字符串""
- 这是菜单选项所需的描述whiptail
,没有它,您会将Choice
andChoice4
视为描述:
Choice1 Choice2
Choice3 Choice4
什么可能不是你想要的。
答案2
如果您需要复选框菜单:
checkboxes ()
{
local -A checkboxes;
checkboxes["foo"]=off;
checkboxes["bar"]=on;
checkboxes["eric"]=on;
backtitle="Backtitle";
title="Title";
question="Please choose:";
choices=();
for key in "${!checkboxes[@]}";
do
choices+=("$key" "" "${checkboxes[$key]}");
done;
result=$(
whiptail --backtitle "$backtitle" \
--title "$title" \
--checklist "$text" \
0 0 0 "${choices[@]}" \
3>&2 2>&1 1>&3-
);
echo "$result"
}