我试图写一个bash脚本,其中包含一个函数,所以当给.tar, .tar。Bz2, .tar.gz等文件,它使用tar和相关开关来解压文件。
我使用if elif然后语句测试文件名,看看它以什么结尾,我不能让它匹配使用正则表达式元字符。
为了节省不断重写脚本,我在命令行使用“test”,我认为下面的语句应该工作,我已经尝试了括号,引号和元字符的每一个组合,但它仍然失败。
test sed-4.2.2.tar.bz2 = tar\.bz2$; echo $?
(this returns 1, false)
我相信这个问题很简单,我到处都找过了,但我不知道该怎么做。有人知道我该怎么做吗?
我没有足够的代表来评论这里,所以我提交了一个新的答案,以改善dogbane的答案。点。在regexp中
[[sed-4.2.2.tar。Bz2 =~ tar。Bz2 $]] && echo匹配
将匹配任何字符,而不仅仅是'tar '之间的点。比如Bz2 '
[[ sed-4.2.2.tar4bz2 =~ tar.bz2$ ]] && echo matched
[[ sed-4.2.2.tar§bz2 =~ tar.bz2$ ]] && echo matched
或者任何不需要用“\”转义的东西。
严格的语法应该是
[[ sed-4.2.2.tar.bz2 =~ tar\.bz2$ ]] && echo matched
或者你可以更严格,也可以在正则表达式中包含之前的点:
[[ sed-4.2.2.tar.bz2 =~ \.tar\.bz2$ ]] && echo matched
我没有足够的代表来评论这里,所以我提交了一个新的答案,以改善dogbane的答案。点。在regexp中
[[sed-4.2.2.tar。Bz2 =~ tar。Bz2 $]] && echo匹配
将匹配任何字符,而不仅仅是'tar '之间的点。比如Bz2 '
[[ sed-4.2.2.tar4bz2 =~ tar.bz2$ ]] && echo matched
[[ sed-4.2.2.tar§bz2 =~ tar.bz2$ ]] && echo matched
或者任何不需要用“\”转义的东西。
严格的语法应该是
[[ sed-4.2.2.tar.bz2 =~ tar\.bz2$ ]] && echo matched
或者你可以更严格,也可以在正则表达式中包含之前的点:
[[ sed-4.2.2.tar.bz2 =~ \.tar\.bz2$ ]] && echo matched