我希望在Bash case语句中匹配文件扩展名模式。
到目前为止,我已尝试/(\.).{3}/:
case ${myArray[count]} in
*CODE*) $codeFound[count]=${myArray[count]};;
/(\.).{3}/) $extensionFound[count]=${myArray[count]};;
esac
CODE的模式匹配有效,但是我遇到了文件扩展模式的问题。 以上引发了错误:
意外令牌附近的语法错误`('
如果我将RegEx包装在@()中,例如@(/(\.).{3}/)
模式也不匹配。
由于
答案 0 :(得分:2)
case语句中的模式匹配不使用正则表达式。从联机帮助页:
案例命令首先扩展单词,并尝试将其与
匹配 每个模式依次使用与路径相同的匹配规则 名称扩展(请参阅下面的路径名扩展)。
您将需要使用if语句块,或者根据case语句中的松散glob进行进一步的正则表达式检查。
case ${myArray[count]} in
*CODE*)
$codeFound[count]=${myArray[count]};;
*.*)
if [[ ${myArray[count]} =~ \..{3} ]]; then
$extensionFound[count]=${myArray[count]}
fi;;
esac