所以我做了一小段代码,应该用另一个字符串中的字符替换下划线(_)。如果您想知道目的,我打算制作Hangman游戏。
x=0
while [ $x -lt $LengthOfAnswer ]; do
if [ $Answer:$x:1 == $GuessedChar ]; then
Underscores=$( echo $Underscores | sed s/_/${Answer:$x:1}/$((x+1)) )
fi
done
这样做的结果是第一次进行猜测,因此这个循环结束,一切都按预期工作。 然而,在那之后,结果开始采取奇怪的模式。
示例:
答案是" abcdef"
开始:" _ _ _ _ _ _"
猜猜" a":" a _ _ _ _ _"
猜猜" b":" a _ b _ _ _"
猜猜" c":" a _ b _ c _"
当然,在那一点上它应该是" a b c _ _ _"
如果有人建议需要采取哪些措施来实现这一目标,我很乐意听到。如果没有别的选择,只能改变我的结构,那么请告诉我。
答案 0 :(得分:1)
通过他的链接,感谢higuaro这个; Hangman Example
额外的上下文帮助我解决了这个问题,得出以下解决方案:
x=0
while [ $x -lt $LengthOfAnswer ]; do
if [ $Answer:$x:1 == $GuessedChar ]; then
Underscores="${Underscores:0:$x}$GuessedChar${Underscores:$((x+1))}"
fi
let "x++"
done
答案 1 :(得分:0)
尝试使用sed,解决许多问题。请参阅下一个代码作为起点。
secret="a b c d e f"
guess="a"
echo "${secret}" | sed 's/[^'${guess}' ]/_/g'
# add each new guess to the quess string. Assume after trying "a", first "p" and "q" is tried before "b" is tried
guess="apqb"
echo "${secret}" | sed 's/[^'${guess}' ]/_/g'
您需要做的就是从播放器读取输入并检查有效输入(一个字符,而不是空格,下划线或类似内容)。