小编典典

如何在 Bash 中将字符串与正则表达式匹配?

all

我正在尝试编写一个包含函数的 bash 脚本,因此当给定一个.tar,等文件时.tar.bz2.tar.gz它使用 tar 和相关开关来解压缩文件。

我正在使用 if elif then 语句来测试文件名以查看它以什么结尾,并且我无法使用正则表达式元字符来匹配它。

为了避免不断重写我在命令行中使用“测试”的脚本,我认为下面的语句应该有效,我已经尝试了括号、引号和元字符的所有组合,但仍然失败。

test sed-4.2.2.tar.bz2 = tar\.bz2$; echo $?
(this returns 1, false)

我确信这个问题很简单,我到处都看过,但我不知道该怎么做。有人知道我该怎么做吗?


阅读 60

收藏
2022-06-20

共1个答案

小编典典

要匹配正则表达式,您需要使用=~运算符。

尝试这个:

[[ sed-4.2.2.tar.bz2 =~ tar.bz2$ ]] && echo matched

或者,您可以在运算符中使用通配符(而不是正则表达式)==

[[ sed-4.2.2.tar.bz2 == *tar.bz2 ]] && echo matched

如果可移植性不是问题,我建议使用[[代替[test,因为它更安全、更强大。

2022-06-20