Bash - case语句中的模式匹配文件扩展名

时间:2012-02-20 22:03:52

标签: bash

我希望在Bash case语句中匹配文件扩展名模式。

到目前为止,我已尝试/(\.).{3}/:

case ${myArray[count]} in

 *CODE*) $codeFound[count]=${myArray[count]};;
/(\.).{3}/) $extensionFound[count]=${myArray[count]};;

esac

CODE的模式匹配有效,但是我遇到了文件扩展模式的问题。 以上引发了错误:

意外令牌附近的语法错误`('

如果我将RegEx包装在@()中,例如@(/(\.).{3}/)模式也不匹配。

由于

1 个答案:

答案 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