文本中的 grep 和括号

neu*_*ino 3 grep bash

我将下载的文件存储在这样的日志中:

[source] filename
Run Code Online (Sandbox Code Playgroud)

为避免多次下载文件,我[source] filename之前grep :

if ! grep "$signature" downloaded.log > /dev/null; then
    wget ...
fi
Run Code Online (Sandbox Code Playgroud)

但是[grep开始我的行并不像我需要的那样工作:

signature="[source] filename"
echo $signature | grep "$signature"
echo $signature | grep "\$signature" #trying to escape first bracket
Run Code Online (Sandbox Code Playgroud)

两者都没有返回。

任何聪明的解决方法?

无需更改代码切换到括号()、大括号{}或其他任何内容也很好。<>

man*_*ork 7

首先你必须引用你的变量,然后你应该使用-F --fixed-stringsswitch 来避免将括号解释为正则表达式元字符:

echo "$signature" | grep -F "$signature"
Run Code Online (Sandbox Code Playgroud)

然后你也应该使用-q --quietswitch ,所以grep一旦发现第一次出现就退出。这仅用于速度考虑:

if ! grep -Fq "$signature" downloaded.log; then
    wget ...
fi
Run Code Online (Sandbox Code Playgroud)