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。正则表达式语法错误的主要内容,如果未能解决你的问题,请参考以下文章