我将下载的文件存储在日志中,如下所示:
[source] filename
为了避免多次下载文件,我[source] filename
之前 grep for :
if ! grep "$signature" downloaded.log > /dev/null; then
wget ...
fi
但用 grep 开始我的行[
不能按我需要的方式工作:
signature="[source] filename"
echo $signature | grep "$signature"
echo $signature | grep "\$signature" #trying to escape first bracket
两者都没有返回任何内容。
有什么聪明的解决方法吗?
如果不需要更改代码,切换到括号()
、大括号{}
或其他内容,那就太好了<>
答案1
首先,您必须引用变量,然后您应该使用-F
--fixed-strings
switch 来避免将括号解释为正则表达式元字符:
echo "$signature" | grep -F "$signature"
那么你也应该使用-q
--quiet
switch,所以grep
一旦发现第一次出现就退出。这仅出于速度考虑:
if ! grep -Fq "$signature" downloaded.log; then
wget ...
fi