我的.txt
文件包含这些内容:
The Law and Lawyers of Pickwick, by Frank Lockwood 21214
Frankenstein, by Mary Wollstonecraft 20
第一个字符串是书名,第二个字符串是作者,最后一个字符串是书号。当有人使用作者姓名搜索时,我想打印整行。我尝试使用 grep。
#!/bin/bash
BOOKFILE="/home/sk/GUTINDEX.ALL"
author=$1
if [[ -z "$author" ]]; then
echo -n "Author name : "
read author
fi
grep $author $BOOKFILE
如果我运行这个并搜索弗兰克·洛克伍德它打印这两行。但是我想在整个输入字符串匹配时打印该行(名字和姓氏)
答案1
你应该把它改成这样:
#!/bin/bash
BOOKFILE="/home/sk/GUTINDEX.ALL"
author=$@
if [[ -z "$author" ]]; then
read -rp "Author name: " author
fi
grep "$author" "$BOOKFILE"
如果您将其运行为:
$ ./script Frank Lockwood
您正在将位置参数 1 设置为Frank
并将参数 2 设置为Lockwood
。您的脚本中未使用参数 2。 $@
是一个表示所有位置参数的数组。
另外,如果您允许将变量read
设置author
为带有空格的字符串,那么在不加引号的情况下, grep 行将会失败author
。