数组进入鞭尾菜单 - BASH

数组进入鞭尾菜单 - BASH

我想展示用户友好的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,没有它,您会将ChoiceandChoice4视为描述:

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"
}

相关内容