Char by Char循环替换在BASH中

时间:2015-04-12 20:12:40

标签: linux string bash loops replace

所以我做了一小段代码,应该用另一个字符串中的字符替换下划线(_)。如果您想知道目的,我打算制作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 _ _ _"

如果有人建议需要采取哪些措施来实现这一目标,我很乐意听到。如果没有别的选择,只能改变我的结构,那么请告诉我。

2 个答案:

答案 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'

您需要做的就是从播放器读取输入并检查有效输入(一个字符,而不是空格,下划线或类似内容)。