if [ '`echo "$url" | grep (\.tar\.gz|\.tar\.bz2|\.zip|\.rar|\.7z)$`' ] ; then
语法错误,我只想检查文件扩展名。
最佳答案
首先,您需要删除 ''
,否则测试只是一个始终计算为 true 的字符串。您需要将正则表达式放在引号中,因为 bash 会解释括号。您还需要使用 egrep
(相当于 grep -E
)。
if [ `echo "$url" | egrep "(\.tar\.gz|\.tar\.bz2|\.zip|\.rar|\.7z)$"` ] ; then
您还可以通过将 .
分解为组并将 tar.{gz,bz2}
分组来缩短正则表达式:
if [ `echo "$url" | egrep "\.(tar\.(gz|bz2)|zip|rar|7z)$"` ] ; then
对于 future ,请注意 bash 给你的错误,它告诉你很多:bash: syntax error near unexpected token (
suggests that error is around the (
,我刚刚向您展示的正是错误所在。
Jonathan's answer提供有关改进测试的更多提示。
关于regex - 如何编写这个 grep 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4527395/