Grep 2 个变量,中间有一个“:”

Grep 2 variables with a ":" in between

我目前在这段代码上停留了很长时间。下面是我的代码。

if grep -ixqF $bookName:$authorName BookDB.txt
then echo "Book found"
else
echo "Book not found"

BookDB 基本上包含如下所示的书名和作者信息,其中语法为 "Book-name:Author".

Mary had a little nose:JamesPoppcock Merry Christmas:Christ Sake Kinky Asians:Walter Bedding

但是,程序总是输出 "Book found",即使书和作者不在 BookDB.txt 中也是如此。我想从这个程序中得到的是,它将读取 2 个用户输入,$bookName$authorName 并将其与数据库完全匹配(包括分号)。

任何帮助将不胜感激!

编辑:程序总是输出 "Book not found",而不是 "Book found"

引用变量扩展部分:

grep -ixqF "$bookName:$authorName" BookDB.txt

没有引用的扩展会受到单词拆分(和全局扩展)的影响,只有第一个单词被用作搜索模式,其余的被视为文件名以及 BookDB.txt .

我为自己的愚蠢错误感到非常尴尬。为了使事情更简单,我没有提供包含 3 个以上参数的原始文本文件。我意识到我的代码的问题是 grep 的 -x 参数,它只找到匹配整行的字符串。 删除它后,程序运行正常。 只有在 Cyrus 评论之后我才意识到这可能是我原来的 BookDB.txt 的问题。 谢谢大家!!

将您的 if 语句更改为以下应该可以解决您的问题

if [ "$(grep -ixF "$bookName:$authorName" BookDB.txt)" != "" ]

根据@heemayl 的建议,您需要在变量周围使用双引号。

此外,您可以不使用 grep 的 -q 选项,而是简单地将输出与 != "" 进行比较。