使用" Grep 2变量:"之间

时间:2016-08-09 05:40:27

标签: bash shell ubuntu grep quotes

我现在很长一段时间都在坚持这段代码。以下是我的代码。

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

BookDB基本上包含书名和作者信息,如下所示,其中语法为"书名:作者"。

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

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

任何帮助将不胜感激!

编辑:程序始终输出"预订未找到"而不是"找到书籍"

3 个答案:

答案 0 :(得分:1)

引用变量扩展部分:

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

在没有引用的情况下,扩展会受到单词拆分(和glob扩展)的影响,只有第一个单词被视为搜索模式,其余的被视为文件名和BookDB.txt。< / p>

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

将你的if if语句改为下面可以解决你的问题

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

正如@heemayl所建议的那样,你需要在变量周围使用双引号。

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