【问题标题】:Bash show charcaters if not in string如果不在字符串中,则 Bash 显示字符
【发布时间】:2015-04-04 18:51:56
【问题描述】:

我正在尝试 bash,我现在正在尝试制作一个简单的刽子手游戏。

一切正常,但我不明白如何做一件事:

我正在向用户显示带有猜测字母的单词(例如,世界是 hello world,用户猜到了 'l' 我向他们显示 **ll* ***l* )

我将用户已经尝试过的字母存储在 varguess 中

我通过以下方式做到这一点:

echo "${word//[^[:space:]$guess]/*}"

我现在想做的是回显字母表,但忽略用户已经尝试过的字母,所以在这种情况下显示完整的字母表,没有 L。

我已经尝试过按照我刚才展示的方式进行操作,但效果不佳。

如果您需要更多信息,请告诉我。

谢谢, 蒂姆

【问题讨论】:

    标签: bash character


    【解决方案1】:

    您没有显示您尝试过的内容,但参数扩展工作正常。

    $ alphabet=abcdefghijklmnopqrstuvwxyz
    $ word="hello world"
    $ guesses=aetl
    $ echo "${word//[^[:space:]$guesses]/*}"
    *ell* ***l*
    $ echo "${alphabet//[$guesses]/*}"
    *bcd*fghijk*mnopqrs*uvwxyz
    

    【讨论】:

      【解决方案2】:

      首先将两个字符串存储在每行一个字符的文件中:

      sed 's/./&\n/g' | sort <<< $guess > guessfile
      sed 's/./&\n/g' | sort <<< $word > wordfile
      

      然后我们可以过滤仅出现在其中一个文件中的单词并将这些行粘贴在一起作为字符串:

      grep -xvf guessfile wordfile | paste -s -d'\0'
      

      当然,我们会自己清理:

      rm wordfile
      rm guessfile
      

      如果输出不正确,请尝试在 grep 中切换参数(即 wordfile guessfile 而不是 guessfile wordfile)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-27
        • 2023-02-15
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        • 1970-01-01
        • 2018-11-09
        • 2020-10-03
        相关资源
        最近更新 更多