Bash zenity list - 阅读用户选择的问题

时间:2018-04-02 15:44:14

标签: bash

我有一个用bash编写的脚本。 在一个地方,我有一个zenity列表,有几个选项:

cuda

之后,当用户选择第一个选项时,我想做某事,当用户选择第二个选项时 - 别的等等。

但idk如何在If语句中使用变量answer:

menu=("first option" "second option" "third option")
answer=`zenity --list --column=Menu "${menu[@]}" --height 170`

当我选择第一个选项并使用:echo“$ answer”时,它会打印“第一个选项”

但是当我尝试时:

if [ option1 ]; then
    ...do something...
elif [ option2 ]; then
    ... do something else...
else
    ... do something different...
fi

它不起作用。

2 个答案:

答案 0 :(得分:0)

您必须将$answer放入""以避免word splitting

#!/usr/bin/env bash

menu=("first option" "second option" "third option")
answer=`zenity --list --column=Menu "${menu[@]}" --height 170`

if [ "$answer" = "first option" ]; then
    printf "First option has been chosen\n"
fi

此外,它recommended使用$(...)代替反叛。替换:

answer=`zenity --list --column=Menu "${menu[@]}" --height 170`

使用:

answer=$(zenity --list --column=Menu "${menu[@]}" --height 170)

修改

我还建议在case使用reducers,但other answer已经提出了建议。

答案 1 :(得分:0)

除引号外,if [ "$answer" = "first option" ]应该有效。您可能希望在此处使用case语句:

case "$answer" in 
    "${menu[0]}") 
        echo do stuff for first 
        ;; 
    "${menu[1]}") 
        echo do stuff for second 
        ;; 
    "${menu[2]}") 
        echo do stuff for third 
        ;; 
esac