【问题标题】:Bash completion doesn't work for MSYS bash. Regex syntax errorbash 完成不适用于 MSYS bash。正则表达式语法错误
【发布时间】: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 专家愿意发表评论吗?祝你好运。

标签: regex bash msys bash-completion


【解决方案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版本的正则表达式相当多。您还遇到了哪些其他问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-07
  • 2020-04-02
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多