显示带有多行描述的菜单

问题描述

我正在尝试使用dialog --menu显示多行描述。
用户2或3个选择,但有2、3或4行文字作为说明。
到目前为止,这是我得到的:
@H_404_6@(在菜单元素中插入\n时)

┌───────────────────Manageable block devices──────────────────────┐
│ Please select source block device for image extraction          │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │      1  sda_465.8G\n└─sda1_465.8G                           │ │
│ │      2  mmcblk0_58.9G\n├─mmcblk0p1_256M\n└─mmcblk0p2_1.9G   │ │
│ └─────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│                   <  OK  >          <Cancel>                    │
└─────────────────────────────────────────────────────────────────┘

您会注意到,\n显示为简单文本。
更不要说这与我的预期相去甚远...
这是我期望得到的结果的一个示例:

┌───────────────────Manageable block devices──────────────────────┐
│ Please select source block device for image extraction          │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │      1  sda_465.8G                                          │ │
│ │         └─sda1_465.8G                                       │ │
│ │      2  mmcblk0_58.9G                                       │ │
│ │         ├─mmcblk0p1_256M                                    │ │
│ │         └─mmcblk0p2_1.9G                                    │ │
│ └─────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│                   <  OK  >          <Cancel>                    │
└─────────────────────────────────────────────────────────────────┘

这是让我知道的代码

#!/bin/zsh

declare -a BUILDING_BLOCK
declare -a BLOCK_DEVICES_LInes
declare -a DIALOG_READY
declare -a MENU_ITEMS

function List_MENU_ITEMS()
{
    local TITLES=("${(@f)$(lsblk -d | grep 'disk' | awk '{ print $1"_"$4; }')}")
    local TITLE_index=1
    BLOCK_DEVICES_LInes=("${(@f)$(lsblk | grep -E 'disk|part' | awk '{ print $1"_"$4; }')}")
    local BLKDEV_line=1
    local BUILDING_BLOCK="${TITLES[${TITLE_index}]}"
    while [[ ${TITLE_index} -le ${#TITLES} ]]
    do
        DIALOG_TITLE="${TITLE_index}"
        BUILDING_BLOCK=${TITLES[${TITLE_index}]}
        TITLE_index=$(( ${TITLE_index} + 1 ))
        while true
        do
            BLKDEV_line=$(( ${BLKDEV_line} + 1 ))
            if [[ ${BLKDEV_line} -le ${#BLOCK_DEVICES_LInes} && "${TITLES[${TITLE_index}]}" != ${BLOCK_DEVICES_LInes[${BLKDEV_Lines}]}"
            then
                # Here is inserted the newline which is expected to display a NEWLINE instead of \n (on screen)
                BUILDING_BLOCK="${BUILDING_BLOCK}\n${BLOCK_DEVICES_LInes[${BLKDEV_line}]}"
            else
                break;
            fi
        done
        # Here is built the final array for dialog menu items
        MENU_ITEMS+=( "${DIALOG_TITLE}" "${BUILDING_BLOCK}" )
    done
}

List_MENU_ITEMS

dialog --title "Manageable block devices" \
       --menu "Please select source block device for image creation" \
       $(( 9 )) ${COLUMNS} 14 \
       "${MENU_ITEMS[@]})"

到目前为止,我已经尝试将\n替换为\\n$'\n',未引用\n$(echo) ...
另外,我尝试使用选项--cr-wrap,它也没有帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)