【问题标题】:Bash zenity list - issue with reading user's choiceBash zenity list - 阅读用户选择的问题
【发布时间】:2018-04-02 15:44:13
【问题描述】:

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

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

之后,当用户选择第一个选项时,我想做某事,当用户选择第二个选项时,我想做其他事情,等等。

但是我知道如何在 If 语句中使用变量答案:

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

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

但是当我尝试时:

if [ $answer = "first option" ]; then
    ....
fi

没用。

【问题讨论】:

  • “没有用”是什么意思?也许您需要将$answer 括在引号中,如下所示:"$answer" = "first option"

标签: bash


【解决方案1】:

您必须将$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,但在other answer 中已经提出了建议。

【讨论】:

    【解决方案2】:

    除了引用,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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多