首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ZSH -如何创建一个提出多个问题的函数,每个问题都导致不同的最终结果?就像一个选择你自己的冒险故事

ZSH -如何创建一个提出多个问题的函数,每个问题都导致不同的最终结果?就像一个选择你自己的冒险故事
EN

Stack Overflow用户
提问于 2018-12-16 09:15:16
回答 1查看 30关注 0票数 1

首先,我真的很抱歉,因为我肯定有人问过这个问题。但我已经找了好几个小时了但一无所获。我正在开发我的第一个真正的函数,ZSH或Bash甚至是我最了解的函数。我正在尝试创建一个简单的函数,它将提出一系列问题,将答案放在一个变量中,并将它们合并在一起以创建最终结果,从而节省时间并减少我最近所做的打字量。这是为最近推出的游戏Fallout 76准备的。我想创建一个交互式库存文件,如果我输入fo76 addweapon,它会问我关于这个武器的问题,并将结果打印出来,以便快速复制粘贴到交易社区中。

我尝试了许多不同的变体,我已经找到了最接近我的,但它不起作用。假设已经预先设置了模式变量。我做错了什么?下一个问题的下一步是什么,它将包括一个效果列表,允许我根据我在上一个答案中选择的数字来选择它们?

代码语言:javascript
复制
if [[ $mode="$MODE_ADD_WEAPON" ]]; then
        title="Add Weapon"
        prompt="How many stars does this weapon have?"
        options1=("1" "2" "3" "4" "5" "Quit")
        PS3="$prompt "
        select opt in "{$options1[@]}"; do
            if [[ -z $opt ]]; then
                echo "$REPLY is not a valid option, try again"
                REPLY=
                    elif [[ $REPLY="$1" ]]; then
                        RESULT="$REPLY Star ";
            fi

        while true; do
            STARS="$RESULT"; echo "$STARS"
        done
        prompt="What prefix does this $STARS weapon have?"
        options2=("Anti-armor" "Assassin's" "Berserker's" "Bloodied" "Exterminator's" "Furious" "Ghoul Slayer's" "Hunter's" "Instigating" "Junkie's" "Mutant's" "Mutant Slayer's" "Nocturnal" "Stalker's" "Suppressor's" "Troubleshooter's" "Vampire's" "Zealot's")
        PS3="$prompt "
        select opt in "{options2[@]}"; do
            if [[ -z $opt ]]; then
                echo "$REPLY is not a valid option, try again"
                REPLY=
                    elif [[ $REPLY=$REPLY ]]; then
                        echo $REPLY; RESULT="$STARS $REPLY"
                    fi
                done
            while true; do
                PREFIX="$REPLY"; echo "$STARS $PREFIX"
            done
        done
fi
}

我目前的计划是将每个结果应用于它自己的变量,并在最后响应它们,看起来像3星死亡之爪Gauntlet,定价为500。一些类似的东西。

EN

回答 1

Stack Overflow用户

发布于 2018-12-16 10:02:58

对于循环,您需要一个退出条件。当前你的条件是"true“,这意味着它将永远循环。通常,您使用某种表达式创建一个循环,该表达式预计会在循环中发生变化。您还可以使用"break“退出循环

下面是来自http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_02.html的一个示例

代码语言:javascript
复制
#!/bin/bash

# Calculate the average of a series of numbers.

SCORE="0"
AVERAGE="0"
SUM="0"
NUM="0"

while true; do

  echo -n "Enter your score [0-100%] ('q' for quit): "; read SCORE;

  if (("$SCORE" < "0"))  || (("$SCORE" > "100")); then
    echo "Be serious.  Common, try again: "
  elif [ "$SCORE" == "q" ]; then
    echo "Average rating: $AVERAGE%."
    break
  else
    SUM=$[$SUM + $SCORE]
    NUM=$[$NUM + 1]
    AVERAGE=$[$SUM / $NUM]
  fi

done

echo "Exiting."
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53798632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档