我将下载的文件存储在这样的日志中:
[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)
两者都没有返回。
任何聪明的解决方法?
无需更改代码切换到括号()、大括号{}或其他任何内容也很好。<>
首先你必须引用你的变量,然后你应该使用-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)