如何在带有 dynamic/conditional 选项的 whiptail 命令中引用变量?

How to quote variables in a whiptail command with dynamic/conditional options?

我需要在 Bash 脚本中内置的对话框命令中禁用选项。这是原始的工作脚本:

my_backtitle="This is a test"
selected_options=($(dialog \
    --backtitle "$my_backtitle" \
    --separate-output \
    --checklist "Select your options:" 0 0 \
    "option1" "description of option 1" "" \
    "option2" "description of option 2" "" \
    3>&1 1>&2 2>&3))

然后我直接在数组中获取选择的选项。

在某些情况下,我需要禁用一些选项。我试过这种方式:

my_condition=false
my_backtitle="This is a test"
dialog_parameters="--backtitle '"
dialog_parameters+="$my_backtitle"
dialog_parameters+="' --separate-output \
    --checklist "Select your options:" 0 0 "
if $my_condition
then
    dialog_command+="'option1' 'description of option 1' '' "
fi
dialog_command+="'option2' 'description of option 2' ''"
selected_options=($(dialog $dialog_parameters 3>&1 1>&2 2>&3))

但我收到错误:Error: Unknown option is.

调试set -e参数,我看到参数展开后的对话框命令:dialog --backtitle ''\''this' is a 'test'\''' --separate....

在这种情况下,如何正确引用包含空格的字符串?

我试过在变量周围使用\",我也试过将参数存储在一个字符串数组中,但没有解决问题。

我应该如何编写这样一个参数化的对话框命令?

您需要使用数组而不是字符串来保存本身可能包含空格的单个参数。

my_condition=false
my_backtitle="This is a test"
args=(--backtitle "$my_backtitle")
args+=(--separate-output)
args+=(--checklist "Select your options:" 0 0)
if $my_condition
then
    args+=( "option1" "description of option 1" )
fi
args+=('option2' 'description of option 2')
selected_options=($(dialog "${args[@]}" 3>&1 1>&2 2>&3))