bash 完成不适用于 MSYS bash。正则表达式语法错误

Posted

技术标签:

【中文标题】bash 完成不适用于 MSYS bash。正则表达式语法错误【英文标题】:Bash completion doesn't work for MSYS bash. Regex syntax error 【发布时间】:2012-02-02 12:51:15 【问题描述】:

我尝试为 MSYS bash 安装 bash-completion,但它似乎包含一些语法错误。 它失败并显示以下消息

bash: /usr/local/share/bash-completion/bash_completion: line 625: syntax error in conditional expression: unexpected token `('
bash: /usr/local/share/bash-completion/bash_completion: line 625: syntax error near `^(\'
bash: /usr/local/share/bash-completion/bash_completion: line 625: `    if [[ $cur =~ ^(\$\?)([A-Za-z0-9_]*)$ ]]; then'

这是失败的代码

# Complete variables.
# @return  True (0) if variables were completed, 
#          False (> 0) if not.
_variables()

    if [[ $cur =~ ^(\$\?)([A-Za-z0-9_]*)$ ]]; then
        [[ $cur == ** ]] && local suffix= || local suffix=
        COMPREPLY+=( $( compgen -P $BASH_REMATCH[1] -S "$suffix" -v -- \
            "$BASH_REMATCH[2]" ) )
        return 0
    fi
    return 1

【问题讨论】:

可能上面的代码是针对更高版本的bash,而不是“BASH_VERSION='3.1.17(1)-release'”(至少在我安装的MSYS中)。任何 Bash 专家愿意发表评论吗?祝你好运。 【参考方案1】:

您正在使用 bash-completion 的 beta 版本 (1.99),您可以尝试使用最新的 stable (1.3)

如果您确实需要 beta 版本,则需要在 if [[ $cur =~ ^(\$\?)([A-Za-z0-9_]*)$ ]]; then 行中为正则表达式 ^(\$\?)([A-Za-z0-9_]*)$ 加上引号,操作符 =~ 的处理因 bash 版本而异(需要 IIRC 3.2 之前的引号)

【讨论】:

谢谢,我尝试为所有正则表达式添加引号,但遇到了其他问题。所以我安装了 stable 并且效果很好。 据我所知,整个文件中只有一个正则表达式。还有什么问题? 我又看了看,1.99版本的正则表达式相当多。您还遇到了哪些其他问题?

以上是关于bash 完成不适用于 MSYS bash。正则表达式语法错误的主要内容,如果未能解决你的问题,请参考以下文章

Sendmail 不适用于 crontab (bash)

bash:git:在 MSYS 中找不到命令

防止 MSYS 'bash' 杀死捕获 ^C 的进程

Bash grep 不适用于撇号

为啥在 Windows7 MSYS 下安装 bash-it 时出现 mkdir 错误

bazel:使用 WSL 的 bash 而不是 MSYS64