Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Grep 2带“的变量:&引用;中间_Bash_Shell_Ubuntu_Grep_Quotes - Fatal编程技术网

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放在测试中的命令替换中并没有好处,这样测试就可以设置退出代码。