Bash 如果不在字符串中则显示字符

Bash show charcaters if not in string

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

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

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

我将用户已经尝试过的字母存储在 var guess

我用以下方法做到这一点:

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

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

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

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

谢谢, 蒂姆

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

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

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

grep -xvf guessfile wordfile | paste -s -d'[=11=]'

当然我们会自己清理:

rm wordfile
rm guessfile

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

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

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