我想制作一个zenity列表,从一个列表中获取一列的字段,从另一个列表中获取另一列的域
menu=("option1" "option2" "option3")
desc=("description1" "description2" "description3")
ans=`zenity --list --column=Menu "${menu[@]}" --column=Description "${desc[@]}" --height 170`
这不起作用,因为它首先显示第一个列表中的所有值,然后显示另一个:
菜单 | 描述 | |
---|---|---|
选项1 | ||
选项3 | 说明1 | |
描述2 | 描述3 |
来自man zenity
:
--column=STRING Set the column header
因此--column
选项将只设置标头,而不会解析数据。在将数据提供给zenity之前,您需要进行一些预处理:
#!/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[@]}")