Bash Grep 2带“的变量:&引用;中间
我目前在这段代码上停留了很长时间。下面是我的代码Bash Grep 2带“的变量:&引用;中间,bash,shell,ubuntu,grep,quotes,Bash,Shell,Ubuntu,Grep,Quotes,我目前在这段代码上停留了很长时间。下面是我的代码 if grep -ixqF $bookName:$authorName BookDB.txt then echo "Book found" else echo "Book not found" BookDB基本上包含如下所示的书名和作者信息,其中语法为“书名:作者” 玛丽有一个小鼻子:jamespoppock 圣诞快乐:看在上帝的份上 古怪的亚洲人:沃尔特床上用品 但是,程序始终输出“Book found”,即使书籍和作者不在BookDB.tx
if grep -ixqF $bookName:$authorName BookDB.txt
then echo "Book found"
else
echo "Book not found"
BookDB基本上包含如下所示的书名和作者信息,其中语法为“书名:作者”
玛丽有一个小鼻子:jamespoppock
圣诞快乐:看在上帝的份上
古怪的亚洲人:沃尔特床上用品
但是,程序始终输出“Book found”,即使书籍和作者不在BookDB.txt中。我想从这个程序中得到的是,它将读取2个用户输入,$bookName
和$authorName
,并将其与数据库精确匹配(包括分号)
任何帮助都将不胜感激
编辑:程序总是输出“未找到书本”,而不是“找到书本”引用变量展开部分:
grep -ixqF "$bookName:$authorName" BookDB.txt
如果不引用扩展名,则会出现分词(和全局扩展),只有第一个单词作为搜索模式,其余单词将与
BookDB.txt
一起作为文件名引用变量扩展部分:
grep -ixqF "$bookName:$authorName" BookDB.txt
如果不引用扩展名,则会出现分词(和全局扩展),只有第一个单词作为搜索模式,其余的单词将与
BookDB.txt
一起被视为文件名,我对自己愚蠢的错误感到十分尴尬。为了使事情更简单,我没有提供包含3个以上参数的原始文本文件。我意识到我的代码的问题是grep的-x参数,它只找到与整行匹配的字符串。
删除它后,程序工作正常。
只有在发表评论之后,我才意识到这可能是我原来的BookDB.txt
的问题。
谢谢大家 我对自己愚蠢的错误感到十分尴尬。为了使事情更简单,我没有提供包含3个以上参数的原始文本文件。我意识到我的代码的问题是grep的-x参数,它只找到与整行匹配的字符串。 删除它后,程序工作正常。 只有在发表评论之后,我才意识到这可能是我原来的
BookDB.txt
的问题。
谢谢大家 将您的if语句更改为以下应该可以解决您的问题
if[“$(grep-ixF”$bookName:$authorName“BookDB.txt)!=”]
正如@heemayl所建议的,您需要在变量周围使用双引号
此外,您可以使用
!=“
将您的if语句更改为以下应该可以解决您的问题
if[“$(grep-ixF”$bookName:$authorName“BookDB.txt)!=”]
正如@heemayl所建议的,您需要在变量周围使用双引号
此外,您可以使用
!=“”
你好!我刚刚编辑了我的程序输出。为这个错误道歉。我也尝试过添加双引号,但是程序仍然重复输出“Book not found”,即使书和作者在数据库中。您好!我刚刚编辑了我的程序输出。为这个错误道歉。我也尝试添加双引号,但程序仍然重复输出“Book not found”,即使该书和作者在数据库中。将您的示例文件上载到某个位置。您好!我在这里上传了原始文本文件。将您的示例文件上传到某个地方。您好!我在这里上传了原始文本文件<代码>grep设置退出代码。我相信您会发现,将grep放在测试中的命令替换中,这样测试就可以设置退出代码,这没有什么好处。grep
设置退出代码。我相信您会发现,将grep放在测试中的命令替换中并没有好处,这样测试就可以设置退出代码。