You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

改编脚本检测字幕格式时遇语法错误,求排查解决

问题排查:Bash字幕格式检测脚本语法错误

错误原因

你遇到的unexpected token '('错误,是因为脚本里用了+([0-9])这种扩展通配符(extglob),而Bash默认没有启用extglob选项,导致shell无法解析这种语法。

修复方案

在脚本开头(#!/bin/bash之后)添加一行开启extglob的命令:

shopt -s extglob

如果脚本需要在严格POSIX模式下运行,extglob会失效,这种情况可以把case里的扩展通配符替换成标准glob,或者改用[[ ... =~ ]]的正则匹配方式。

修改后的完整脚本

#!/bin/bash
shopt -s extglob

subfmt_convert__fmt_detect() {
  local file="$1" line
  local -i c=0 max_lines=40

  fmt_detect_ret=

  local NB_FD_FILE
  exec {NB_FD_FILE}<"$file"

  # szybsze od subotage.sh o ok 10 do 300 razy... Wykrywa te same formaty.
  while read -u $NB_FD_FILE line; do
    c+=1; test "$c" -gt "$max_lines" && break

    case "${line:0:1}" in
      "{"|'[')
        case "$line" in
          '{'+([0-9])'}{'*([0-9])'}'*)
            fmt_detect_ret='microdvd'
            break
            ;;
          '['+([0-9])']['*([0-9])']'*)
            fmt_detect_ret='mpl2'
            break
            ;;
        esac
        ;;
      0)
        case "$line" in
          00:[0-5][0-9]:[0-5][0-9],[0-9][0-9][0-9]' --> '00:[0-5][0-9]:[0-5][0-9],[0-9][0-9][0-9]*)
            fmt_detect_ret='subrip'
            break
            ;;
          00:[0-5][0-9]:[0-5][0-9]:[0-9][0-9],00:[0-5][0-9]:[0-5][0-9]:[0-9][0-9]*)
            fmt_detect_ret='subview'
            break
            ;;
          0?(0):[0-5][0-9]:[0-5][0-9]:*)
            fmt_detect_ret='tmplayer'
            break
            ;;
          +([0-9])' : 00:'[0-5][0-9]:[0-5][0-9]:[0-9][0-9]+( )00:[0-5][0-9]:[0-5][0-9]:[0-9][0-9]*)
            fmt_detect_ret='fab'
            break
            ;;
        esac
        ;;
    esac
  done

  exec {NB_FD_FILE}>&-

  echo "$fmt_detect_ret"
}

subfmt_convert__fmt_detect "$1"

补充说明

  • shopt -s extglob会开启Bash的扩展通配符支持,允许使用+()、?()、*()这类模式匹配语法。
  • 如果脚本需要在不支持extglob的shell环境运行,可以把case语句里的扩展通配符替换为标准glob(比如用[0-9]*代替+([0-9]),但匹配精度会略有下降),或者改用[[ $line =~ 正则表达式 ]]的方式进行匹配。

内容的提问来源于stack exchange,提问作者D S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:43:10