Bash - 显示来自两个数组的字段的 Zenity 列表

Bash - Zenity list to display fields from two arrays

我想制作一个 zenity 列表,它从一个列表中获取一列的字段,从另一个列表中获取另一列的字段

menu=("option1" "option2" "option3")
desc=("description1" "description2" "description3")
ans=`zenity --list --column=Menu "${menu[@]}" --column=Description "${desc[@]}" --height 170`

这不起作用,因为它首先显示第一个列表中的所有值,然后显示另一个列表中的所有值:

Menu Description
option1 option2
option3 description1
description2 description3

所以我想我可能需要按交替顺序合并它们,但我不知道如何。

来自 man zenity :

  --column=STRING
         Set the column header

因此 --column 选项只会设置 header,而不会解析您的数据。在将数据提供给 zenity 之前,您需要做一些 pre-processing :

#!/usr/bin/env bash
menu=("option1" "option2" "option3")
desc=("description1" "description2" "description3")

# this for loop will create a new array ("option1" "description1" "option2" ...)
# there will be issues if the 2 arrays don't have the same length    
for (( i=0; i<${#menu[*]}; ++i)); do
    data+=( "${menu[$i]}" "${desc[$i]}" )
done

ans=$(zenity --list --column=Menu --column=Description --height 170 "${data[@]}")