【问题标题】:Bash - Pattern match file extension in case statementBash - case 语句中的模式匹配文件扩展名
【发布时间】:2012-02-20 22:03:52
【问题描述】:

我正在寻找匹配 Bash case 语句中的文件扩展名模式。

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

case ${myArray[count]} in

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

esac

CODE 的模式匹配有效,但是文件扩展名的模式有问题。 以上抛出错误:

意外标记 `(' 附近的语法错误

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

谢谢

【问题讨论】:

    标签: bash


    【解决方案1】:

    case 语句中的模式匹配不使用正则表达式。从手册页:

    case 命令首先扩展单词,并尝试匹配它
    每个模式依次使用与路径相同的匹配规则-
    名称扩展(参见下面的路径名扩展)。

    您将需要使用 if 语句块,或者根据 case 语句中松散的 glob 进行进一步的正则表达式检查。

    case ${myArray[count]} in
    
     *CODE*) 
         $codeFound[count]=${myArray[count]};;
     *.*) 
       if [[ ${myArray[count]} =~ \..{3} ]]; then 
          $extensionFound[count]=${myArray[count]}
       fi;;
    
    esac
    

    【讨论】:

    • @Pumbaa80 这将是 case 语句 +1 更好的模式匹配。
    猜你喜欢
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2015-09-30
    相关资源
    最近更新 更多