匹配文件名通配模式时使用交替

匹配文件名通配模式时使用交替
if [[ $1 == *.(png|jpg) ]]

这是我尝试过的,但它不起作用。我需要检查是否$1与这些文件名后缀之一匹配,这样我就可以用它做一些事情。我不知道该怎么做。我刚刚进入bash。我已经搜索了所有这些论坛和其他论坛。我还没有找到适用于条件if语句的东西。

答案1

@(this|that)匹配thisthatBash 也支持的 Ksh 风格的扩展 glob。使用 Bash,您需要使用shopt -s extglob来启用扩展的 glob。从 Bash 版本 4.1 开始,这些功能在内部默认启用[[ ]]

shopt -s extglob # needed in bash-4.0 or older
if [[ $1 == *.@(jpg|png) ]]; then 
    echo match
else
    echo no match
fi

在 Zsh 中,你可以使用*.(jpg|png)

在标准 sh 中,您可以使用case,但必须重复整个模式:

case $1 in
    *.png|*.jpg) echo match;;
    *)           echo no match;;
esac

看:

相关内容